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

Bộ kết quả tham gia MYSQL kết quả bị xóa trong IN () trong mệnh đề where?

Suy nghĩ về những gì mã của bạn đang làm một cách hợp lý:

( 1 IN (tag.tag_id) ) AND ( 2 IN (tag.tag_id) )

tương đương với

( 1 = (tag.tag_id) ) AND (2 = (tag.tag_id) )

Không đời nào tag.tag_id có thể thỏa mãn cả hai điều kiện cùng một lúc, vì vậy AND không bao giờ đúng.

Có vẻ như phiên bản HOẶC mà bạn đã trích dẫn trong câu hỏi của mình là phiên bản bạn thực sự muốn:

SELECT DISTINCT name FROM person LEFT JOIN tag ON person.id = tag.person_id 
  WHERE ( ( 1 IN (tag.tag_id) ) OR ( 2 IN (tag.tag_id) ) );   

Sử dụng mệnh đề IN thích hợp hơn, bạn có thể viết như sau:

SELECT DISTINCT name FROM person LEFT JOIN tag ON person.id = tag.person_id 
  WHERE tag.tag_id in (1,2);   

Một lưu ý cuối cùng, vì bạn đang tham chiếu một cột từ bảng LEFT JOINed trong mệnh đề WHERE của mình (tag.tag_id ), bạn đang thực sự buộc điều đó phải hoạt động giống như một THAM GIA BÊN TRONG. Để thực sự có được THAM GIA TRÁI, bạn cần phải chuyển các tiêu chí ra khỏi WHERE và biến nó thành một phần của các điều kiện THAM GIA:

SELECT DISTINCT name FROM person LEFT JOIN tag ON person.id = tag.person_id 
  AND tag.tag_id in (1,2);   


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. INTERSECT trong MySQL

  2. SQL:Làm thế nào chúng ta có thể tạo một table1 THAM GIA table2 TRÊN một bảng được cho trong một trường trong table1?

  3. Cách hiển thị dữ liệu Unicode với PHP

  4. MySQL tham gia một-nhiều với Group By chỉ trả về một quan sát

  5. Giải thích Wordnet SQL