Zwei Selects in eines kombinieren.. geht das?

Miraculixx

Erfahrenes Mitglied
Hallo,
wieder mal stehe ich vor einer unlösbaren Aufgabe (zumindest für mich).

Ich habe folgende zwei Selects:
SQL:
select * from user u, angebote a, wohnungen w where 
a.angebot_id = w.id AND w.user_id = u.id AND u.id = 1

select * from user u, angebote a, suchprofil s where 
a.angebot_id = s.id AND s.user_id = u.id AND u.id = 1

Und möchte die nun in ein Select zusammenfassen - ist das möglich?
Meine Idee war diese:
SQL:
select * from user u, angebote a, wohnungen w, suchprofil s 
where (a.angebot_id = w.id AND w.user_id = u.id) 
OR (a.angebot_id = s.id AND s.user_id = u.id) 
AND u.id = 1
Allerdings werden dabei die Zeilen doppelt oder dreifach ausgegeben - vermutlich fehlt irgend ein JOIN oder sowas, nur ich komm leider nicht dahinter...

Wäre super wenn mir jemand weiter helfen kann :)

PS: Ich weiß jetzt nicht genau, ob noch genauere Informationen zu den Tabellen notwendig sind. Kurz erklärt: Ein User kann sowohl ein suchprofil als auch eine wohnung haben, und eine wohnung wird in der tabelle 'angebote' mit einem suchprofil eines anderen users verknüpft (aber nicht mit einem suchprofil von ihm selbst). Und ich will eben alle suchprofile & wohnungen auslesen, die zu einem benutzer gehören.

Vielen Dank :)
Miraculixx
 
Zuletzt bearbeitet von einem Moderator:
Probier mal Select Distinct(*)...

Deine Query solltest du aber nur verwenden, wenn du net all zu große tabellen hast, da du ne normale tabellenverknüpfung machst. Also jeden eintrag einer tab mit den einer anderen verknüpfst
 
Hi,

DISTINCT ist schon machbar aber Du wolltest ja etwas zu UNION wissen. Also, wenn Deine ersten beiden Abfragen miteinander über den UNION operator verknüpft werden sollen mußt Du beachten das beide SQL-Queries die selbe Anzahl von Spalten, vom selben TYP zurückliefern.
-- UNION -> es werden nur unterschiedliche Zeilen zurückgeliefert.
-- UNION ALL -> es werden ALLE Zeilen zurückgeliefert also auch doppelte.

In Deinem Beispiel würde das dann so aussehen (wenn die WIRKLICH die selben Attribute verwenden!!):
SQL:
    SELECT * 
    FROM 
        user u
        , angebote a
        , wohnungen w 
    WHERE
          a.angebot_id = w.id 
    AND   
          w.user_id = u.id 
    AND   
        u.id = 1
UNION
    SELECT * 
    FROM 
        user u
        , angebote a
        , suchprofil s 
    WHERE
        a.angebot_id = s.id 
    AND 
        s.user_id = u.id 
    AND 
      u.id = 1

Soweit zu UNION

Zu Deiner Abfrage: Ich würde das evtl. so machen, habe leider Deine Tabellen nicht kann es nicht testen, aber sollte etwa so gehen:

SQL:
SELECT 
        *
FROM
       USER  u      
join
       angebote a ON  u.id = a.id
join
       wohnungen w ON u.id = w.id
join 
       suchprofil s ON u.id = s.id
WHERE 
       u.id = 1

Viele Grüße
 
Zuletzt bearbeitet:
Okay vielen dank gleich mal für die Antworten!
Hab grad nicht meinen PC hier, aber morgen kann ich es testen.
Meld mich dann wieder wenn ich was herausgefunden habe :-)
 
Zurück