Join: wie Bedingung setzen? etwas komplizierter

Hi,

hab ein kleines Problem mit einem Join.
Also:
3 Tabellen:
Name.Spalte(Typ) Inhalt
a.ID(int) 1|2|3

b.aID(int) 1|2|3
b.cID(int) 1|2|3

c.ID(int) 1|2|3

SELECT DISTINCT(a.ID) FROM a
LEFT JOIN b ON (a.ID=b.aID)
LEFT JOIN c ON (c.ID=b.cID)

Soweit der Join…
Nun möchte ich die a.ID wo
a.ID = 1 und c.ID = 1
UND
a.ID = 1 und c.ID = 3
ist.
Also wo beide Bedingungen Stimmen ein Ergebnis, und wenn mindestens eine nicht stimmt, kein Ergebnis.
Ich will alle a.ID wo beide d.ID 1 oder 3 sind.
Leider hab ich grad keine Ahnung, wie ich das in einem SQL unterbringe…

cu Desian

leicht!

SELECT DISTINCT(a.ID) FROM a
LEFT JOIN b ON (a.ID=b.aID)
LEFT JOIN c ON (c.ID=b.cID)

where a.id = 1 and c.id in (1,3)

Gruß
Clemens

Hi,

sorry aber das würde heißen, dass nur entweder eine ODER die andere Bedingung stimmen muß, es sollen aber beide Stimmen müssen.

cu Desian

Ach so, sag’s doch gleich :smile:

Klassische Lösung:

select Id from a
where 2 =
(select count(c.id)
from b left join c on b.id = c.id
where b.id = a.id and c.id in (1,3))

Gruß
Clemens

Hi,

ich hab jetzt ne Weile daran rumprobiert und das Query ist dabei Rasugekommen:
SELECT DISTINCT(a.ID) FROM a
LEFT JOIN b ON (a.ID = b.A_ID)
LEFT JOIN c ON (c.ID = b.C_ID)
WHERE a.ID=(SELECT COUNT(a.ID) FROM a
LEFT JOIN b ON (a.ID = b.A_ID)
LEFT JOIN c ON (c.ID = b.A_ID)
WHERE a.ID = b.A_ID and c.ID in (1,3))

Is nur ne etwas abgewandelte Form.
Beide Querys tun jede für sich, nur zusammen tun sie nicht.
Ich habe MySQLv4.0.13
Er meint:

MySQL said:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT COUNT( a.ID ) FROM a LEFT JOIN b ON ( a.ID = b.A\_ID ) 

eigendlich sollte MySQL aber seit 4.0 Subselects können oder irre ich mich?

cu Desian