schildi: ...mysql: noch eine join abfrage

hallo,
ich habe solch eine anfrage:

SELECT a.id
FROM tabelle_a
LEFT OUTER JOIN tabelle_b b ON a.id=b.id
LEFT OUTER JOIN tabelle_c c ON a.id=c.id
LEFT OUTER JOIN tabelle_d d ON a.id=d.id
LEFT OUTER JOIN tabelle_e e ON a.id=e.id
GROUP BY a.id

in jeder tabelle gibt es also eine spalte id. mit dieser abfrage wollte ich ALLE unterschiedlichen id's zurückbekommen haben, die es in allen tabellen gibt (es kann also der fall auftreten, dass eine id in einer tabelle vorhanden ist die in einer andern nicht vorhanden ist).

aber irgendwie funktioniert die anfrage so nicht. er scheint mir immer nur alle is's von tabelle_a zurückzugeben, obwohl zb. in tabelle_b noch weitere id's sind die nicht in tabelle_a vorhanden sind.

ich weiss grad überhaupt nicht, wo mein fehler liegt?

danke im voraus für jede hilfe...

  1. Hallo schildi

      
    SELECT DISTINCT a.id  
    FROM tabelle_a  
    LEFT OUTER JOIN tabelle_b b ON a.id = b.id  
    
    

    liefert genau alle Einträge id aus Tabelle "tabelle_a", auch wenn sie in Tabelle "tabelle_b" nicht vorhanden sind.

    Möchtest Du das umgekehrte, so musst Du den LEFT JOIN umkehren. Du könntest statt dessen mit Subselects arbeiten.

    aber irgendwie funktioniert die anfrage so nicht. er scheint mir immer nur alle is's von tabelle_a zurückzugeben, obwohl zb. in tabelle_b noch weitere id's sind die nicht in tabelle_a vorhanden sind.

    Nö, scheint nicht nur, ist so. Genauso ist das vorgesehen.

    Freundliche Grüße

    Vinzenz

    1. liefert genau alle Einträge id aus Tabelle "tabelle_a", auch wenn sie in Tabelle "tabelle_b" nicht vorhanden sind.

      mist. stimmt. subselects gehen bei mir noch net. also wohl right outer joins..?

      1. mist. stimmt. subselects gehen bei mir noch net. also wohl right outer joins..?

        tja - das geht ja logischerweise auch net, weil er dann wieder nur die daten der ersten tabelle nimmt :|.

        jeglicher versuch mit cross-joins zu arbeiten führt jedoch zu einem overload :(. also habe ich nun entschieden einzelne anfragen an die datenban zu schicken und den rest mit php zu erledigen...

  2. yo,

    in jeder tabelle gibt es also eine spalte id. mit dieser abfrage wollte ich ALLE unterschiedlichen id's zurückbekommen haben, die es in allen tabellen gibt

    (SELECT id FROM tabelle_a)
    UNION
    (SELECT id FROM tabelle_b)
    UNION
    (SELECT id FROM tabelle_c)
    UNION
    (SELECT id FROM tabelle_d)
    UNION
    (SELECT id FROM tabelle_e)

    Ilja