Ergebnis 1 bis 7 von 7

Thema: Subquery mehrfach verwenden?!

  1. #1
    Daxi ist offline Neuer Benutzer
    Registriert seit
    09.08.2009
    Beiträge
    2

    Standard Subquery mehrfach verwenden?!

    Hallo zusammen, ich habe mir ein kleines Item-Modell gebaut.
    Hier solle eine universelle Datenstruktur (nur fürs Backend) entstehen.
    Fürs Frontend sollen die Daten dann nochmals aufbereitet seperat gespeichert werden.

    Tabellen:
    - [object]
    - [object]_attribute
    - [object]_reference

    Diese drei Tabellen enthalten hier dann die verschiedenen Werde bzw. Konfigurationen.
    Da ein Query über die Attribute für eine Suche sehr umfangreich werden aufgrund der Vererbung und Sprachabhängigkeit, wollte ich mir ein Subquery schreiben, welches ich mehrfach verwenden kann.

    Z.B. In dieser Art:
    Code:
    SET subquery = (SELECT object_id, key, value FROM [...])
    SELECT sq1.object_id
    FROM subquery AS sq1
    INNER JOIN subquery AS sq2 ON sq2.object_id = sq1.object_id
    WHERE (
      (sq1.key = 'param1' AND sq1.value = 'testwert1')
      OR (sq1.key = 'param2' AND sq1.value = 'testwert2')
    )
    AND (sq2.key = 'param3' AND sq2.value = 'testwert3')
    Ist eine solche Konstellation möglich? Wenn ja, wie? Leider meckert er z.B. beim SET-Befehl wegen dem Select. Wenn ich ein Alias auf ein Alias mache kommt "Relation xy not exists" oder ähnlich.
    Eine View kommt aufgrund der Einschränkung im Subquery auf die notwendigen Parameter nicht in Frage.

    Kann mir jemand von euch weiterhelfen?
    Geändert von Daxi (09.08.2009 um 15:44 Uhr) Grund: Formatierung zuschossen

  2. #2
    castorp ist offline Erfahrener Benutzer
    Registriert seit
    27.06.2009
    Beiträge
    525

    Standard

    Zuersteinmal: das mit den generischen Attributen ist eher verpönt und Du solltest Dir zweimal überlegen, ob Du das machen willst. Such mal im Netz nach dem Begriff EAV (Entity Attribute Value).

    Auch wenn ich eigentlich grundsätzlich von diesem Ansatz abrate: folgende Variante sollte genau das machen, was Du willst.
    Code:
    WITH subquery AS 
    (
     SELECT object_id, key, value FROM [...]
    ) 
    SELECT sq1.object_id
    FROM subquery AS sq1
    INNER JOIN subquery AS sq2 ON sq2.object_id = sq1.object_id
    WHERE (
      (sq1.key = 'param1' AND sq1.value = 'testwert1')
      OR (sq1.key = 'param2' AND sq1.value = 'testwert2')
    )
    AND (sq2.key = 'param3' AND sq2.value = 'testwert3')

  3. #3
    fristo ist offline Super-Moderator
    Registriert seit
    08.12.2005
    Ort
    Raum Frankfurt/Main
    Beiträge
    668

    Standard

    Es wäre nett, wenn Ihr uns mitteilen würdet, in welche PostgreSQL Doku ihr die Definition "SET subquery" bzw "WITH subquery AS" gefunden habt.


    mfg

    fristo
    Nur wer verstanden hat, wie die Technik funktioniert, kann sie beherrschen!

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von fristo Beitrag anzeigen
    Es wäre nett, wenn Ihr uns mitteilen würdet, in welche PostgreSQL Doku ihr die Definition "SET subquery" bzw "WITH subquery AS" gefunden habt.


    mfg

    fristo
    In der offiziellen möglicherweise.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    castorp ist offline Erfahrener Benutzer
    Registriert seit
    27.06.2009
    Beiträge
    525

    Standard

    Zitat Zitat von fristo Beitrag anzeigen
    Es wäre nett, wenn Ihr uns mitteilen würdet, in welche PostgreSQL Doku ihr die Definition "SET subquery" bzw "WITH subquery AS" gefunden habt
    Zu SET subquery kann ich nichts sagen. Soweit ich das sehe ist das keine Syntax von Postgres

    Das von mir vorgeschlagene WITH subquery (offizieller Name "common table expression") ist hier dokumentiert:

    http://www.postgresql.org/docs/current/static/queries-with.html

  6. #6
    Daxi ist offline Neuer Benutzer
    Registriert seit
    09.08.2009
    Beiträge
    2

    Daumen hoch

    Hallo castorp,

    danke für deine Hilfe.
    Leider setze ich momentan noch die 8.3 ein.
    WITH-Queries sind ein neues Feature der 8.4.
    Jetzt wirds wohl Zeit für ein Update...

    Gruß,
    Daxi

  7. #7
    fristo ist offline Super-Moderator
    Registriert seit
    08.12.2005
    Ort
    Raum Frankfurt/Main
    Beiträge
    668

    Standard

    Zitat Zitat von castorp Beitrag anzeigen
    Zu SET subquery kann ich nichts sagen. Soweit ich das sehe ist das keine Syntax von Postgres

    Das von mir vorgeschlagene WITH subquery (offizieller Name "common table expression") ist hier dokumentiert:

    PostgreSQL: Documentation: Manuals: PostgreSQL 8.4: WITH Queries

    Ja richtig, zwischenzeitlich hatte ich die Definition von "WITH (sub)query AS" als neues Feature in der Doku für PostgreSQL 8.4 auch gefunden.

    Danke



    mfg

    FriSto
    Nur wer verstanden hat, wie die Technik funktioniert, kann sie beherrschen!

Ähnliche Themen

  1. SUBQUERY ohne IN
    Von MeisterU im Forum SQL
    Antworten: 11
    Letzter Beitrag: 25.03.2010, 15:07
  2. Problem mit Subquery
    Von saband im Forum SQL
    Antworten: 8
    Letzter Beitrag: 28.08.2009, 10:47
  3. Summe aus Subquery
    Von cevou im Forum SQL
    Antworten: 8
    Letzter Beitrag: 26.08.2008, 13:05
  4. Frage Mehrfach-Hierarchie
    Von HomeWorker im Forum SQL
    Antworten: 7
    Letzter Beitrag: 12.06.2008, 13:37
  5. Problem mit Mehrfach Join
    Von hafi im Forum SQL
    Antworten: 4
    Letzter Beitrag: 19.02.2008, 09:48

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum