Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Konwertuj SQL WHERE IN na JOIN

Myślę, że rozumiem, co próbujesz zrobić. Istnieje więcej niż jeden sposób na oskórowanie kota, ale czy mogę zasugerować podzielenie zapytania na dwa oddzielne zapytania, a następnie zastąpienie skomplikowanej klauzuli WHERE kilkoma sprzężeniami wewnętrznymi? A więc coś takiego:

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

Następnie utwórz oddzielne zapytanie, aby uzyskać połączenia oparte na edukacji:

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

Jeśli naprawdę chcesz, aby wyniki danych zostały połączone, możesz użyć UNION ponieważ oba zapytania zwracają te same kolumny z tabeli osoby.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. wybierz 10 wierszy dziennie z zamówieniem

  2. PHP Najlepszy sposób na buforowanie wyników MySQL?

  3. Kolejność MySQL Według alternatywnych wartości

  4. Jak używać hashowania hasła z PDO, aby mój kod był bezpieczniejszy?

  5. SQLException:metoda executeQuery nie może być użyta do aktualizacji