Mysql
 sql >> база данни >  >> RDS >> Mysql

Резултатите от MYSQL присъединяват се изтрити резултати по време на IN () в клауза where?

Помислете какво прави вашият код логически:

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

е еквивалентен на

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

Няма начин tag.tag_id може да удовлетвори и двете условия едновременно, така че И никога не е вярно.

Изглежда, че версията ИЛИ, която цитирахте във вашия въпрос, е тази, която наистина искате:

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) ) );   

Използвайки клаузата IN по-подходящо, можете да напишете това като:

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

Една последна забележка, защото препращате към колона от таблицата LEFT JOINed във вашата клауза WHERE (tag.tag_id ), вие наистина го принуждавате да се държи като INNER JOIN. За да получите наистина LEFT JOIN, ще трябва да преместите критериите от WHERE и вместо това да го направите част от условията JOIN:

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. Ado Entity:Третирайте Tiny като Boolean =false

  2. Кой е най-добрият начин да проверите дали нещо съществува с PDO

  3. Как да конвертирате главни букви в малки букви в MySQL

  4. Използвайте MySQL пространствени разширения, за да изберете точки в кръг

  5. Mysql изберете различен