SQL-Alias verknüpften Tabellen

Ich habe eine Abfrage wie diese:

select a1.name, b1.info 
 from (select name, id, status 
         from table1 a) as a1
right outer join (select id, info 
                    from table2 b) as b1 on (a1.id = b1.id)

Ich will nur alles einschließen, wobei a1.status=1 und da bin ich mit einem outer-join, ich kann nicht fügen Sie einfach eine where Einschränkung auf Tabelle1, weil alle Infos aus Tabelle2, dass ich will, ausgeschlossen zu werden immer noch da sein, nur eben ohne den Namen. Ich dachte, so etwas wie dieses:

 select z1.name, z1.info 
   from ((select name, id, status 
            from table1 a) as a1
right outer join (select id, info 
                    from table2 b) as b1 on (a1.id = b1.id)) as z1 
  where z1.status = 1

aber ich glaube nicht, dass das legal ist.

BEARBEITEN:
Wie unten beschrieben, eine äußere Verknüpfung eigentlich gar keinen Sinn für das, was ich versuche zu tun. Was ist, wenn, zum Beispiel, ich möchte alle Daten aus Tabelle2 where status!=1 in Tabelle1, inklusive aller Daten, wobei eine entsprechende ID gar nicht vorhanden sind in Tabelle1. Somit bräuchte ich eine outer-join alle Daten aus Tabelle2, aber immer noch wollen, schließen Sie diese Einträge, bei denen der status=1.

Entspricht:

 select z1.name, z1.info 
   from ((select name, id, status 
            from table1 a) as a1
right outer join (select id, info 
                    from table2 b) as b1 on (a1.id = b1.id)) as z1 
  where z1.status != 1
Ich denke, ich erkannte mein problem... bei einem outer-join nicht wirklich Sinn macht für das, was ich Tue. Wenn der status muss 1 sein, das bedeutet, dass der Datensatz muss vorhanden sein, die in Tabelle 1, so sollte ich werden über einen inner join sowieso.
In Reaktion auf einige Ihrer Kommentare - ich glaube nicht, dass Sie verstehen, wie die JOIN s arbeiten. Ein LEFT OUTER JOIN zeigt Ihnen alle Datensätze in der ersten Tabelle, und dann alle passenden Datensätze aus der zweiten (oder NULL wenn es nicht passt). Ein RIGHT OUTER JOIN genau das Gegenteil tut - Sie alle Datensätze aus Tabelle 2, passend nur in Tabelle 1. Ein INNER JOIN zeigt dir nur, wo die Kriterien matches/Sätze existieren in BEIDEN Tabellen.
Tatsächlich, ich verstehe ganz gut, was ein Join tut. Ich war zunächst Holen Sie die Daten aus Tabelle2 mit der rechten outer-join, um sicherzustellen, dass ich bekam, dass alle Daten, unabhängig davon, ob eine entsprechende ID vorhanden in Tabelle1. Seitdem habe ich beschlossen, ich brauchte nur die Daten von denen, die aktiv waren, die gekennzeichnet ist von "Tabelle1" den status. Ich habe versucht, diese änderungen ohne zu merken, dass bei einem outer-join wird sinnlos, wenn ein entsprechender Datensatz mit einem aktiven status gibt es in "Tabelle1".
Super, ich hatte nicht die Absicht, herablassend oder beleidigend, wenn ich stieß auf diese Weise. Joins sind eine der am häufigsten missverstandenen Aspekte von SQL, das ist alles 🙂
Keine Sorge, meine Frage war nicht gerade sehr sinnvoll, logisch, so sehe ich, wie Sie es nehmen könnte als mein eigenes Missverständnis des Konzepts. Ich denke, dass meine überarbeitete Frage macht Sinn, obwohl.

InformationsquelleAutor Lincecum | 2010-11-01

Schreibe einen Kommentar