From: | Peter Wullinger <peter(dot)wullinger(at)gmail(dot)com> |
---|---|
To: | B(dot)Max(at)web(dot)de |
Cc: | pgsql-de-allgemein(at)postgresql(dot)org |
Subject: | Re: Array als Selektionsfilter benutzen |
Date: | 2005-10-13 22:21:46 |
Message-ID: | 20051013222146.GA41633@kaliope.csn.tu-chemnitz.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-de-allgemein |
In epistula a B(dot)Max(at)web(dot)de, die horaque Thu, Oct 13, 2005 at 08:22:56AM +0200:
>
> Ich habe eine Tabelle in der ein Spalte vom Typ Array ist und möchte dieses Array jetzt zum Selektieren einer anderen Tabelle benutzen.
Auch in dem Fall, dass das jetzt akademisch (aka besserwisserisch)
klingt:
In diesem Fall ist es eigentlich ganz gut, dass Du das mit SQL nicht
so einfach lösen kannst. So ein Datenbankschema ist nämlich nicht
in 1NF (Erste Normalform), die Felder sind nicht atomar.
Die Einträge in dem Array sollten eigentlich in einer extra Tabelle
liegen, die Du dann von Deiner Tabelle aus referenzierst.
> Also meine Vorstellung war sowas wie:
>
> SELECT * FROM tabelle2 where id in (SELECT arrayCOL FROM tabelle1 WHERE id = 1 LIMIT 1)
>
> Das funktioniert nicht da er das Ergebnis des Subselects komplett und nicht Elementweise mit der ID vergleicht.
>
> Wäre für Vorschläge dankbar .. muss auch nicht in dieser Form sein .. wenns mit JOIN oder anderen Sachen geht ist das auch okay.
Und jetzt schalte ich mal den Formalisten-Modus wieder aus, oder wie
einer meiner Professoren das mal formulierte: Nachdem ich Ihnen jetzt
mitgeteilt habe, dass sie das so nicht machen sollen, zeige ich Ihnen,
wie es doch geht ;-):
http://www.postgresql.org/docs/8.0/interactive/functions-comparison.html#FUNCTIONS-COMPARISON-TABLE
Das Stichwort heißt "ANY":
SELECT
tabelle2.* FROM tabelle2
JOIN tabelle1
ON tabelle2.id = ANY (tabelle1.arraycol)
;
Dass das in PostgreSQL geht ist allerdings ... keine herausragende
Eigenschaft im Sinne einer relationalen Datenbank.
Gruss,
Peter
--
From | Date | Subject | |
---|---|---|---|
Next Message | Alvar Freude | 2005-10-20 09:08:36 | c't Datenbank-Contest; PL/pgSQL, PL/perl, PL/parrot |
Previous Message | Markus Wollny | 2005-10-13 10:35:03 | Re: select count() |