Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MYSQL bergabung dengan hasil, atur hasil yang dihapus selama IN () di klausa mana?

Pikirkan tentang apa yang dilakukan kode Anda secara logis:

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

setara dengan

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

Tidak mungkin tag.tag_id dapat memenuhi kedua kondisi secara bersamaan, jadi AND tidak pernah benar.

Sepertinya versi ATAU yang Anda kutip dalam pertanyaan Anda adalah yang benar-benar Anda inginkan:

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

Menggunakan klausa IN lebih tepat, Anda dapat menulisnya sebagai:

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

Satu catatan terakhir, karena Anda mereferensikan kolom dari tabel LEFT JOINed di klausa WHERE Anda (tag.tag_id ), Anda benar-benar memaksanya untuk berperilaku seperti INNER JOIN. Untuk benar-benar mendapatkan LEFT JOIN, Anda harus memindahkan kriteria dari WHERE dan menjadikannya bagian dari ketentuan 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. Pelajari cara membuat cadangan database MySQL Anda

  2. MySqlDataReader.GetStream() melempar IndexOutOfRangeException

  3. Mengapa skrip cadangan basis data saya tidak berfungsi di php?

  4. layanan mysql gagal memulai/menutup - batas waktu (Ubuntu, MariaDB)

  5. Pengecualian Hibernate pada MySQL Cross Join Query