Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chuyển đổi SQL WHERE IN thành JOIN

Tôi nghĩ rằng tôi hiểu những gì bạn đang cố gắng làm. Có nhiều cách để lột da mèo, nhưng tôi có thể đề xuất tách truy vấn của bạn thành hai truy vấn riêng biệt và sau đó thay thế mệnh đề WHERE phức tạp bằng một vài phép nối bên trong không? Vì vậy, một cái gì đó như thế này:

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

Sau đó, tạo một truy vấn riêng để nhận các kết nối dựa trên trình độ học vấ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

Nếu bạn thực sự muốn kết hợp các kết quả dữ liệu, bạn có thể sử dụng UNION vì cả hai truy vấn đều trả về các cột giống nhau từ bảng người.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL tham gia các bảng trong đó tên bảng là một trường của một bảng khác

  2. Làm thế nào để chỉ lấy các bảng, không phải các khung nhìn bằng cách sử dụng SHOW TABLES?

  3. Chọn một float trong MySQL

  4. cách nhóm và đếm bằng MySQL

  5. Viết một tệp PHP để đọc từ CSV và thực thi Truy vấn SQL