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

mysql:chọn tất cả các mục từ bảng A nếu không tồn tại trong bảng B

Đây là nguyên mẫu cho những gì bạn muốn làm:

SELECT * FROM table1 t1
  WHERE NOT EXISTS (SELECT 1 FROM table2 t2 WHERE t1.id = t2.id)

Đây, id được giả định là PK và FK trong cả hai bảng. Bạn nên điều chỉnh cho phù hợp. Cũng lưu ý rằng điều quan trọng là phải so sánh PK và FK trong trường hợp này.

Vì vậy, đây là cách truy vấn của bạn sẽ trông như thế nào:

SELECT id, room_name FROM rooms r
WHERE NOT EXISTS 
(SELECT * FROM room_events re
    WHERE
          r.room_id = re.room_id
          AND
          (
          room_start BETWEEN '1294727400' AND '1294729200' 
          OR 
          room_finish BETWEEN '1294727400' AND '1294729200')
          )

Nếu bạn muốn, bạn kiểm tra các phần của truy vấn của mình bằng cách thực thi chúng trong ứng dụng khách mysql. Ví dụ:bạn có thể đảm bảo liệu phần sau có trả về bất kỳ bản ghi nào hay không:

SELECT * FROM room_events 
    WHERE room_start BETWEEN '1294727400' AND '1294729200' 
          OR 
          room_finish BETWEEN '1294727400' AND '1294729200'

Nếu không, bạn đã tìm ra thủ phạm và hành động tương ứng với các bộ phận khác :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hoàn thành Hướng dẫn xóa mềm &khôi phục bản ghi đã xóa của Laravel 8

  2. mysql - bao nhiêu cột là quá nhiều?

  3. Làm cách nào để thoát ký hiệu phần trăm theo nghĩa đen khi tùy chọn NO_BACKSLASH_ESCAPES được bật?

  4. Tôi không thể tìm thấy my.cnf trên máy tính windows của mình

  5. Sự khác biệt giữa các toán tử <> và! =Trong MySQL là gì?