Skip site navigation (1) Skip section navigation (2)

Re: Funktionsargument fü?==?iso-8859-1?Q?r eine "field IN ($1)" Bedingung

From: Andreas Tille <tille(at)debian(dot)org>
To: Peter Eisentraut <peter_e(at)gmx(dot)net>
Cc: PostgreSQL <pgsql-de-allgemein(at)postgresql(dot)org>
Subject: Re: Funktionsargument fü?==?iso-8859-1?Q?r eine "field IN ($1)" Bedingung
Date: 2010-12-21 21:44:56
Message-ID: 20101221214456.GC7316@an3as.eu (view raw or flat)
Thread:
Lists: pgsql-de-allgemein
On Tue, Dec 21, 2010 at 12:47:41AM +0200, Peter Eisentraut wrote:
> Ich würde ungefähr so anfangen:
> 
> SELECT package, version, architecture, maintainer, description FROM
> packages WHERE (package, version) IN (SELECT package, max(version) FROM
> packages WHERE package IN ('gcc', 'python', 'postgresql') GROUP BY
> package);

Ich habe es bereits so gemacht:

SELECT pkg.package, pkg.version, pkg.architecture, (SELECT release FROM releases WHERE sort = MAX(r.sort)) AS release
  FROM packages pkg
  JOIN (
   SELECT pv1.package, MIN(architecture) AS architecture, pv1.version
     FROM packages pv1
     JOIN (
         SELECT package, MAX(version) AS VERSION
           FROM packages WHERE package IN ('worldwind', 'xplanet-images', 'xplanet', 'xulrunner-dev')
           GROUP BY package
         ) mv ON pv1.version = mv.version AND pv1.package = mv.package
	 WHERE pv1.package IN ('worldwind', 'xplanet-images', 'xplanet', 'xulrunner-dev')
         GROUP BY pv1.package, pv1.version
   ) sv1 ON pkg.version = sv1.version AND pkg.architecture = sv1.architecture
  JOIN releases r ON r.release = pkg.release
     WHERE pkg.package IN ('worldwind', 'xplanet-images', 'xplanet', 'xulrunner-dev')
  GROUP BY pkg.package, pkg.architecture, pkg.version
;

was pro Paket die maximale Version, das letzte Release und "irgendeine"
Architektur (hier halt das Minimum) liefert.  Die Konstruktion

   WHERE (a , b) IN (SELECT a, b FROM ...)

kannte ich noch nicht.  Bevor ich jetzt verschiedene Tests mache: Was ist
vorzuziehen: JOIN oder WHERE (a, b, c, d) IN (SELECT a, b, c, d)  ?
 
> Das ist allerdings totlangsam, weil die UDD keine passenden Indexe
> gesetzt hat. Vielleicht mal einen Dump lokal einspielen und versuchen,
> ein paar Indexe zu setzen.

Ich habe eine "Test-UDD" und kann das dort mal probieren.  Danke für den
Tip

     Andreas. 

-- 
http://fam-tille.de

In response to

pgsql-de-allgemein by date

Next:From: Andreas TilleDate: 2010-12-22 08:32:08
Subject: Re: Funktionsargument fü?==?iso-8859-1?Q?r eine "field IN ($1)" Bedingung
Previous:From: Martin SpottDate: 2010-12-21 16:24:31
Subject: Re: Signal 11

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group