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

MySQL - Pilih dari daftar nomor yang tidak memiliki pasangan di bidang id tabel

Ini adalah masalah yang cukup umum:menghasilkan relasi dengan cepat tanpa membuat tabel. Solusi SQL untuk masalah ini cukup canggung. Salah satu contoh menggunakan tabel turunan:

SELECT n.id
FROM
  (SELECT 2 AS id 
   UNION SELECT 3 
   UNION SELECT 4 
   UNION SELECT 5 
   UNION SELECT 6 
   UNION SELECT 7) AS n
  LEFT OUTER JOIN foos USING (id)
WHERE foos.id IS NULL;

Tetapi skala ini tidak terlalu baik, karena Anda mungkin memiliki banyak nilai, bukan hanya enam. Akan melelahkan untuk membuat daftar panjang dengan satu UNION dibutuhkan per nilai.

Solusi lain adalah menyimpan tabel tujuan umum yang terdiri dari sepuluh digit, dan menggunakannya berulang kali untuk berbagai tujuan.

CREATE TABLE num (i int);
INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);

SELECT n.id
FROM 
  (SELECT n1.i + n10.i*10 AS id
   FROM num AS n1 CROSS JOIN num AS n10
   WHERE n1.i + n10.i*10 IN (2, 3, 4, 5, 6, 7)) AS n
  LEFT OUTER JOIN foos USING (id)
WHERE foos.id IS NULL;

Saya menunjukkan kueri dalam yang menghasilkan nilai dari 0,.99 meskipun ini tidak diperlukan untuk kasus ini. Tetapi Anda mungkin memiliki nilai yang lebih besar dari 10 dalam daftar Anda. Intinya dengan satu tabel num , Anda dapat menghasilkan jumlah besar tanpa harus menggunakan rantai yang sangat panjang dengan satu UNION per nilai. Selain itu, Anda dapat menentukan daftar nilai yang diinginkan di satu tempat, yang lebih nyaman dan mudah dibaca.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masalah Python:Tidak dapat menemukan vcvarsall.bat

  2. Spark:Membaca tabel MySQL besar ke DataFrame gagal

  3. Instalasi Django mysqlclient

  4. Encoding JSP saat memasukkan teks non-Inggris di database MySQL

  5. MySQLSyntaxErrorException saat mencoba menjalankan PreparedStatement