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

MySQL - Chọn từ danh sách các số không có đối số trong trường id của bảng

Đây là một vấn đề khá phổ biến:tạo quan hệ một cách nhanh chóng mà không cần tạo bảng. Các giải pháp SQL cho vấn đề này khá khó xử. Một ví dụ sử dụng bảng dẫn xuất:

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;

Nhưng điều này không mở rộng tốt lắm, bởi vì bạn có thể có nhiều giá trị thay vì chỉ sáu giá trị. Có thể trở nên mệt mỏi khi tạo một danh sách dài với một UNION cần thiết cho mỗi giá trị.

Một giải pháp khác là giữ một bảng có mục đích chung gồm mười chữ số và sử dụng nó nhiều lần cho nhiều mục đích.

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;

Tôi hiển thị truy vấn bên trong tạo ra các giá trị từ 0..99 mặc dù điều này không cần thiết cho trường hợp này. Nhưng bạn có thể có các giá trị lớn hơn 10 trong danh sách của mình. Vấn đề là với một bảng num , bạn có thể tạo số lượng lớn mà không cần phải sử dụng chuỗi rất dài với một UNION mỗi giá trị. Ngoài ra, bạn có thể chỉ định danh sách các giá trị mong muốn ở một nơi, thuận tiện và dễ đọc hơn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ngoại lệ không mong muốn:SQLSTATE [HY000] [1045] Quyền truy cập bị từ chối đối với người dùng **** @ 'localhost' (sử dụng mật khẩu:CÓ)

  2. Làm cách nào để xóa khỏi vùng chọn trong MySQL?

  3. PHP- chèn dữ liệu nhị phân trong mysql bằng cách sử dụng các câu lệnh đã chuẩn bị sẵn

  4. PHP MySQL đặt Thời gian chờ kết nối

  5. Quyền truy cập bị Từ chối vì MYSQL ERROR 1045