获取不在数据库中的整数

时间:2016-04-05 07:33:26

标签: mysql

我有这个MySQL表:

create table example (
    My_Id      INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    My_Integer INT UNSIGNED DEFAULT 0
) ENGINE=InnoDB

假设要填充此表:

SELECT * FROM `example`

My_Id   My_Integer
1       10
2       1
3       3
4       152
5       16
6       481
7       128

我的目标是从用户输入中检索哪个整数不在我的表中'示例'。

例如,如果用户输入1,3,10,则结果应为空。 如果用户输入1,2,3,10,结果应为" 2"。

我无法找到一种方法,除了每个整数执行一个MySQL请求,以便知道该数字是否在表中,例如'。 有人知道吗?

2 个答案:

答案 0 :(得分:1)

你可以创建计数表并使用OUTER JOIN

SELECT t.n
FROM (
  SELECT a.N + b.N * 10 + c.N * 100 + 1 n
  FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 
      UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 
      UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
    ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 
      UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 
      UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
    ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 
      UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 
      UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) c
    ) t
LEFT JOIN example e
 ON t.n = e.My_Integer
WHERE t.n IN (1,2,3,10)     -- here goes numbers
  AND e.My_Integer IS NULL;

LiveDemo

输出:

╔═══╗
║ n ║
╠═══╣
║ 2 ║
╚═══╝

它将在1-999范围内有效。如果需要,你可以扩展它。

另一种方法是使用UNION ALL

SELECT s.col
FROM (SELECT 1 AS col
      UNION ALL SELECT 2
      UNION ALL SELECT 3
      UNION ALL SELECT 10) AS s
LEFT JOIN example e
  ON s.col = e.My_Integer
WHERE e.My_Integer IS NULL;

LiveDemo2

答案 1 :(得分:1)

Select numberToMatch
from example as a 
right outer join (
  select 1 as numberToMatch union all 
  select 2 union all 
  select 3 union all 
  select 10
) as b 
on b.numberToMatch = a.My_Integer
where a.My_Integer is null

使用右外连接并在左表中选择那些空记录。