Re: Array als Selektionsfilter benutzen

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

--

In response to

Browse pgsql-de-allgemein by date

  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()