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

MySQL SELECT WHERE IN LIST dan NOT IN LIST dalam SQL yang sama

buat pernyataan gabungan luar sehingga Anda mendapatkan:

SELECT ids.id, table_live.moderation_date
FROM (select 1 id union all select 2 union all ....) ids
LEFT JOIN table_live
ON ids.id = table_live.id

di mana id adalah subquery yang menghitung semua nilai, kira-kira seperti ini:

$ids = '1,2,3,4,5'
$subquery = 'select '.str_replace(',', ' id union all select ', $ids).''
$sql = "SELECT ids.id, table_live.moderation_date
FROM ($subquery) ids
LEFT JOIN table_live
ON ids.id = table_live.id"

pastikan untuk memilih ids.id , bukan table_live.id . Dengan begitu, id akan selalu muncul, dan moderation_date hanya jika baris yang sesuai ada di table_live.

Pendekatan lain adalah menjaga kueri seperti yang Anda miliki, menyimpan hasilnya dalam sebuah array, dan kemudian menggabungkan array di php sehingga Anda mempertahankan semua kunci, dan mengisi nilai hanya di mana kunci cocok di kedua array.

Saya tidak begitu yakin jenis pustaka db apa yang Anda gunakan, jadi saya tidak tahu bagaimana cara mendapatkan larik dari hasil, tetapi misalkan Anda akan menyimpan baris dalam larik php, menggunakan representasi string dari id sebagai kunci, dan tanggal sebagai nilai, maka kode ini harus melakukan trik:

$items = array(
    '1' => NULL
,   '2' => NULL
,   ...
); 
//note: use string keys in order to merge!!
$result = array_merge($items, $resultset);

lihat:http://php.net/manual/en/function.array -merge.php




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL banyak ke banyak pilih

  2. MySQL - Metode terbaik untuk menangani data hierarkis ini?

  3. MySQL:Bagaimana cara menggunakan pembatas di pemicu?

  4. Memformat tanggal ke format yang dapat dibaca manusia

  5. GALAT 1115 (42000):Kumpulan karakter tidak dikenal:'utf8mb4'