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

Tìm nạp bản ghi từ một bảng mà không có bản ghi trong bảng khác

Sử dụng NOT IN:

SELECT s.*
  FROM SURVEYS s
 WHERE s.userid != 28
   AND s.surveyid NOT IN (SELECT r.survey_id
                            FROM RESPONSES r
                           WHERE r.userid = 28)

Sử dụng LEFT JOIN / IS NULL:

   SELECT s.*
     FROM SURVEYS s
LEFT JOIN RESPONSES r ON r.survey_id = s.surveyid
                     AND r.user_id = 28
    WHERE s.userid != 28
      AND r.userid IS NULL

Sử dụng KHÔNG TỒN TẠI:

SELECT s.*
  FROM SURVEYS s
 WHERE s.userid != 28
   AND NOT EXISTS (SELECT NULL
                     FROM RESPONSES r
                    WHERE r.userid = 28
                      AND r.survey_id = s.surveyid)

Trong số các tùy chọn được liệt kê, NOT INLEFT JOIN/IS NULL tương đương mặc dù tôi thích NOT IN vì nó dễ đọc hơn.



  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 - Tối ưu hóa ĐẶT HÀNG BẰNG THAN trên cột bảng đã tham gia

  2. Lưu các thay đổi trong SlickGrid bằng php

  3. Mysql, PHP, tìm kiếm nhiều từ

  4. mysql:Cú pháp phù hợp để KHÔNG THÍCH là gì?

  5. Hàm GREATEST () MySQL - Tìm đối số lớn nhất trong danh sách đối số