sql >> Databasteknik >  >> RDS >> Mysql

Konvertera SQL WHERE IN till JOIN

Jag tror jag förstår vad du försöker göra. Det finns mer än ett sätt att flå en katt, men kan jag föreslå att du delar upp din fråga i två separata frågor och sedan ersätter den komplicerade WHERE-satsen med ett par inre kopplingar? Så, ungefär så här:

/* 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

Skapa sedan en separat fråga för att få anslutningar baserat på utbildning:

/* 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

Om du verkligen vill att dataresultaten ska kombineras kan du använda UNION eftersom båda frågorna returnerar samma kolumner från persontabellen.



  1. Hur visar jag poster vertikalt i mysql-kommandoraden?

  2. Vilken är den rekommenderade batchstorleken för SqlBulkCopy?

  3. SQLite Query i Android med hjälp av markören

  4. Oracle:Kan jag se programmatiskt om en procedur innehåller en commit?