Mysql
 sql >> база данни >  >> RDS >> Mysql

Преобразувайте SQL WHERE IN в JOIN

Мисля, че разбирам какво се опитваш да направиш. Има повече от един начин да одерете котка, но мога ли да предложа да разделите заявката си на две отделни заявки и след това да замените сложната клауза WHERE с няколко вътрешни съединения? И така, нещо подобно:

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

След това създайте отделна заявка, за да получите връзки въз основа на образование:

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

Ако наистина искате резултатите от данните да бъдат комбинирани, можете да използвате UNION тъй като и двете заявки връщат едни и същи колони от таблицата с лица.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Кога връзките се връщат към пула за връзки с Spring JPA (хибернация) Entity Manager?

  2. Вземете MAX от GROUP BY

  3. Как да убия MySQL връзки

  4. Как да проверите привилегиите на потребителя в MySQL Workbench с помощта на GUI

  5. GET параметрите са уязвими към SQL инжекция - PHP