Alle Zeilen finden, zu denen es keine passende Zeile in zweiter Tabelle gibt
Alle Zeilen finden, zu denen es keine passende Zeile in zweiter Tabelle gibt
am 18.09.2006 23:19:50 von Andre
Hallo Gruppe,
ich habe zwei Tabellen:
Tabelle A
a_id name
1 a
2 b
3 c
Tabelle B
b_id a_id flag name
1 2 y x
2 2 n y
3 3 n z
Wie finde ich die Zeilen von Tabelle A, zu denen es keine passende Zeile
(gejoint anhand von a_id) in Tabelle B gibt, wo flag = "y" ist?
In diesem Beispiel müßte ich also die Einträge 1/a und 3/c aus Tabelle A
bekommen. 2/b sollte nicht mit ausgewählt werden, denn in Tabelle B gibt es
ja einen Eintrag mit a_id = 2 und flag="y".
Verständlich?
Mir scheint, das ist nicht möglich, aber ich kann auch keinen Grund finden,
warum es nicht möglich sein sollte.
Grüße,
André
Re: Alle Zeilen finden, zu denen es keine passende Zeile in zweiterTabelle gibt
am 19.09.2006 12:18:29 von Claus Reibenstein
André Hänsel schrieb:
> Wie finde ich die Zeilen von Tabelle A, zu denen es keine passende Zeile
> (gejoint anhand von a_id) in Tabelle B gibt, wo flag = "y" ist?
<450f0d77$1_2@news.arcor-ip.de>
Gruß. Claus
Re: Alle Zeilen finden, zu denen es keine passende Zeile in zweiter Tabelle gibt
am 19.09.2006 12:45:13 von Thomas Rachel
André Hänsel schrieb mit undeklarierten Umlauten:
> Wie finde ich die Zeilen von Tabelle A, zu denen es keine passende Zeile
> (gejoint anhand von a_id) in Tabelle B gibt, wo flag = "y" ist?
>
> In diesem Beispiel müßte ich also die Einträge 1/a und 3/c aus Tabelle
> A bekommen.
m te? Eintr ge? Ach so, müÃte/Einträge. Bitte, wie gesagt, gemäÃ
oe-faq.de Deine Umlaute richtig einstellen.
> Mir scheint, das ist nicht möglich,
Doch. Und zwar kannst Du die Flag-Bedingung auch in den ON-Teil ziehen.
Also:
SELECT A.a_id, A.name FROM A JOIN B ON a.a_id=b.a_id AND flag='y' -- [1]
WHERE b.a_id IS NULL. -- [2]
[1] selektiert alle Einträge aus A, verknüpft entweder mit Einträgen aus B
oder, falls es keine passenden mit flag='y' gibt, mit einer NULL-Zeile.
[2] sucht diese NULL-Zeilen dann raus.
Thomas
--
"Macht's gut und danke für den Fisch"
Signatur zum Gedenken an Douglas Adams (1952 - 11.05.2001)
http://www.douglasadams.com/
Re: Alle Zeilen finden, zu denen es keine passende Zeile in zweiter Tabelle gibt
am 01.10.2006 04:49:39 von Andreas Hofmann
André Hänsel schrieb:
> ich habe zwei Tabellen:
>
> Tabelle A
> a_id name
> 1 a
> 2 b
> 3 c
>
> Tabelle B
> b_id a_id flag name
> 1 2 y x
> 2 2 n y
> 3 3 n z
>
> Wie finde ich die Zeilen von Tabelle A, zu denen es keine passende Zeile
> (gejoint anhand von a_id) in Tabelle B gibt, wo flag = "y" ist?
>
> In diesem Beispiel müßte ich also die Einträge 1/a und 3/c aus Tabelle A
> bekommen. 2/b sollte nicht mit ausgewählt werden, denn in Tabelle B gibt es
> ja einen Eintrag mit a_id = 2 und flag="y".
SELECT * FROM A WHERE a_id NOT IN (SELECT a_id FROM B WHERE flag = 'y')
Grüße,
Andreas