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

Làm cách nào để viết một truy vấn chọn đơn giản thay vì sử dụng các dạng xem?

Những gì bạn cần là một HAVING mệnh đề cần tìm COUNT(*) = 2 sau khi phân nhóm theo ngày tháng và chuyên ngành. Trên thực tế, thậm chí không cần làm tổ. (Tôi cũng đã thay thế phép kết hợp ngầm của bạn bằng dấu phẩy được phân tách bằng dấu phẩy FROM mệnh đề có JOIN rõ ràng , là cú pháp hiện đại được ưa thích hơn).

SELECT 
  v.pid,
  d.speciality,
  v.date,
  COUNT(COUNT DISTINCT d.did) AS numvisits
FROM 
  visits v
  JOIN Doctors d ON v.did = d.did
GROUP BY v.pid, d.speciality, v.date
HAVING COUNT(COUNT DISTINCT d.did) = 2
/* Note - depending on your RDBMS, you may
   be able to use the count alias as
HAVING numvisits = 2 
   MySQL allows this, for ex, but MS SQL Server doesn't and I think Oracle doesn't */

SELECT liệt kê ở đây và GROUP BY phải cung cấp id bệnh nhân, chuyên khoa, ngày và số lần khám cho sự kết hợp tổng hợp của 3 cột đó. HAVING sau đó, điều khoản này chỉ giới hạn ở những người có 2 lượt truy cập cho nhóm.

Để kéo chỉ các bệnh nhân từ điều này, bọc nó trong một truy vấn con:

SELECT Patients.* 
FROM Patients JOIN (
  SELECT 
    v.pid,
    d.speciality,
    v.date,
    COUNT(COUNT DISTINCT d.did) AS numvisits
  FROM 
    visits v
    JOIN Doctors d ON v.did = d.did
  GROUP BY v.pid, d.speciality, v.date
  HAVING COUNT(COUNT DISTINCT d.did) = 2
) subq ON Patients.pid = subq.pid


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để thiết lập sao chép từ MySQL sang MongoDB?

  2. Nhập tệp XML lớn vào MySQL

  3. Chèn số thứ tự trong MySQL

  4. Cách tăng kết nối tối đa trong MySQL

  5. CodeIgniter - Tải lên hình ảnh thông qua biểu mẫu, lưu trữ vị trí của hình ảnh trong cơ sở dữ liệu