sql >> Database teknologi >  >> RDS >> Mysql

Konverter SQL WHERE IN til JOIN

Jeg tror, ​​jeg forstår, hvad du prøver at gøre. Der er mere end én måde at flå en kat på, men kan jeg foreslå at dele din forespørgsel op i to separate forespørgsler og derefter erstatte den komplicerede WHERE-klausul med et par indre joinforbindelser? Altså noget som dette:

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

Opret derefter en separat forespørgsel for at få forbindelser baseret på uddannelse:

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

Hvis du virkelig ønsker, at dataresultaterne skal kombineres, kan du bruge UNION da begge forespørgsler returnerer de samme kolonner fra persontabellen.



  1. Send MySQL blob-indhold som et json-svar

  2. Rails 3 SQL-forespørgselsvalg med joins

  3. Konvertering af tabel fra MyISAM til INNODB

  4. Oracle:Beregn tidsforskel i TT:MM:SS mellem 2 datoer