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