Re: Funktionsargument für eine "field IN ($1)" Bedingung

From: Andreas Tille <andreas(at)an3as(dot)eu>
To: PostgreSQL <pgsql-de-allgemein(at)postgresql(dot)org>
Subject: Re: Funktionsargument für eine "field IN ($1)" Bedingung
Date: 2010-12-22 08:32:08
Message-ID: 20101222083208.GA13793@an3as.eu
Views: Raw Message | Whole Thread | Download mbox | Resend email
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

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Martin Spott 2010-12-23 22:00:58 Re: Signal 11
Previous Message Andreas Tille 2010-12-21 21:44:56 Re: Funktionsargument für eine "field IN ($1)" Bedingung