sql >> Databáze >  >> RDS >> Mysql

Převeďte SQL WHERE IN na JOIN

Myslím, že chápu, o co se snažíš. Existuje více než jeden způsob, jak stáhnout kočku z kůže, ale mohu navrhnout rozdělení vašeho dotazu na dva samostatné dotazy a poté nahradit komplikovanou klauzuli WHERE několika vnitřními spojeními? Takže něco takového:

/* Find connections based on health care */
SELECT p2.p_id as id, p2.fname, p2.lname, p2.image
FROM person p
JOIN health_case hc on hc.patient = p.p_id
JOIN health_case hc2 on hc2.doctor = hc.doctor and hc2.healthcenter = hc.healthcenter and hc.start <= hc2.end and hc.end >= hc2.start and hc2.patient <> hc.patient
JOIN person p2 on p2.p_id = hc2.patient and p2.p_id <> p.p_id
WHERE p.p_id = :id

Poté vytvořte samostatný dotaz pro získání spojení na základě vzdělání:

/* Find connections based on education */
SELECT p2.p_id as id, p2.fname, p2.lname, p2.image
FROM person p
JOIN education e on e.pupil = p.p_id
JOIN education e2 on e2.school = e.school and e2.start <= e.end AND e2.end >= e.start and e.pupil <> e2.pupil
JOIN person p2 on p2.p_id = e2.pupil and p2.p_id <> p.p_id
WHERE p.p_id = :id

Pokud opravdu chcete, aby byly výsledky dat kombinovány, můžete použít UNION protože oba dotazy vracejí stejné sloupce z tabulky osob.



  1. SQL Server – Potřebuji se připojit, ale NENÍ rovno

  2. Řešení problémů generátoru číselných řad – Část 4

  3. Nejlepší způsob, jak zabezpečit SQL dotaz v PHP

  4. Proč SQLSTATE[HY000]:Obecná chyba?