MySQL: SELECT mit IN()
Kalle_B
- datenbank
Hallöle,
ich habe einen Stundenplan (Tabelle tm_slots) und möchte wissen, ob die Personen 3713 oder 3714 Termine haben:
Stunde Person
1 -
2 3714
3 3713
3 3714
also haben BEIDE einen Termin in Stunde 3. Das bekomme ich aber nicht mit
SELECT
slt1.nr slot_nr
,kon1.id kon_id
,kon1.besucher_id
FROM tm_slots slt1
-- GEBUCHTE KONTAKTE
LEFT JOIN tm_kontakte kon1
ON kon1.slot_nr=slt1.nr AND kon1.besucher_id IN (3713,3714)
WHERE slt1.owner_id=5
GROUP BY slt1.nr
Drt Teil IN (3713,3714) gibt sich mit einem zufrieden.
Habe die Dokumentation von "IN" nicht gefunden. Habe ich "IN" nicht richtig angewendet?
LG Kalle
SELECT slt1.nr slot_nr
,kon1.id kon_id
,kon1.besucher_id
FROM tm_slots slt1
LEFT JOIN tm_kontakte kon1
ON kon1.slot_nr=slt1.nr AND
WHERE slt1.owner_id=5 AND kon1.besucher_id IN (3713,3714)
GROUP BY slt1.nr
HTH
SELECT slt1.nr slot_nr
,kon1.id kon_id
,kon1.besucher_id
FROM tm_slots slt1
LEFT JOIN tm_kontakte kon1
ON kon1.slot_nr=slt1.nr AND
----------------------------------^
WHERE slt1.owner_id=5 AND kon1.besucher_id IN (3713,3714)
GROUP BY slt1.nr
Das AND ist wohl zu viel?
Sorry, so geht es nicht, bekomme Laufzeitprobleme, wenn zu jeder von 30 Stunden 600\*600 Personen "addiert" werden und erst danach die gesuchten Personen herausgefiltert werden. Der Codeschnippsel war ja eine Kürzung. Hier das gesamte SQL:
~~~sql
SELECT
slt1.nr slot_nr
,kon1.id kon_id
,kon1.besucher_id
,per1.bezeichnung aussteller_name
,evb1.id evb_id
,evb1.adress_id evb_adr_id
,evt1.name event_name
FROM tm_slots slt1
-- GEBUCHTE KONTAKTE
LEFT JOIN tm_kontakte kon1
ON kon1.slot_nr=slt1.nr
-- AUSSTELLER-NAME
LEFT JOIN tm_adressen AS per1
ON per1.id=kon1.aussteller_id
-- GEBUCHTE EVENTS
LEFT JOIN tm_eventbuchungen evb1
ON ( evb1.von_slot_nr=slt1.nr OR evb1.bis_slot_nr=slt1.nr )
-- EVENTNAME
LEFT JOIN tm_events AS evt1
ON evt1.id=evb1.wunsch_event_id
WHERE slt1.owner_id=5 AND ( kon1.besucher_id IN (4235) OR evb1.adress_id IN (4235) )
GROUP BY slt1.nr
LG Kalle