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

MySQL - Изберете от списък с числа тези без двойник в полето id на таблица

Това е доста често срещан проблем:генериране на релация в движение без създаване на таблица. SQL решенията за този проблем са доста неудобни. Един пример за използване на производна таблица:

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;

Но това не се мащабира много добре, защото може да имате много стойности вместо само шест. Може да стане уморително да се създаде дълъг списък с един UNION необходими за стойност.

Друго решение е да държите под ръка таблица с общо предназначение от десет цифри и да я използвате многократно за множество цели.

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;

Показвам вътрешната заявка, генерираща стойности от 0..99, въпреки че това не е необходимо за този случай. Но може да имате стойности, по-големи от 10 в списъка си. Въпросът е, че с една таблица num , можете да генерирате големи числа, без да се налага да прибягвате до много дълги вериги с един UNION на стойност. Освен това можете да посочите списъка с желаните стойности на едно място, което е по-удобно и по-четливо.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Избиране на записи по дата ->=СЕГА(), MySQL

  2. Конкатенация на низове в MySQL

  3. mysql Пребройте множество поява на мултиплексирани записи

  4. MySql Connector 6.8.2 RC, Entity Framework 6 и Code First

  5. Има ли начин да получите последния вмъкнат идентификатор на НЕ - автоматично увеличена колона в MySQL?