Mysql 给出列表中存在而表中不存在的ID
我有一个ID列表,比如(1,2,3,4,5,6)。我想知道列表中有多少id在表中不存在。我该怎么做Mysql 给出列表中存在而表中不存在的ID,mysql,Mysql,我有一个ID列表,比如(1,2,3,4,5,6)。我想知道列表中有多少id在表中不存在。我该怎么做 -- table -- id name 1 a 2 b 3 c 4 d 5 e 6 f 7 g 我得到的Id列表是1,2,3,4,5,6,7,8,9,10,11,12,13 因此,当查询时,我应该得到不在表中的结果,如8、9、10、11、12、13 SELECT 6-c FROM ( SELECT C
-- table --
id name
1 a
2 b
3 c
4 d
5 e
6 f
7 g
我得到的Id列表是1,2,3,4,5,6,7,8,9,10,11,12,13
因此,当查询时,我应该得到不在表中的结果,如8、9、10、11、12、13
SELECT
6-c
FROM (
SELECT
COUNT(DISTINCT(ID)) as c
FROM
my_table
WHERE
ID IN (1,2,3,4,5,6)
) as tmp
并找出哪些丢失了:
SELECT
zID
FROM (
SELECT 1 as zID UNION
SELECT 2 as zID UNION
SELECT 3 as zID UNION
SELECT 4 as zID UNION
SELECT 5 as zID UNION
SELECT 6 as zID UNION
SELECT 7 as zID UNION
SELECT 8 as zID UNION
SELECT 9 as zID UNION
SELECT 10 as zID UNION
SELECT 11 as zID UNION
SELECT 12 as zID UNION
SELECT 13 as zID UNION
SELECT 14 as zID UNION
SELECT 15 as zID UNION
) as t1
LEFT JOIN (
SELECT
DISTINCT(ID) as mID
FROM
my_table
) as t2
ON t1.zID = t2.mID
WHERE
t2.mID IS NULL
试试这个:
SELECT
6-c
FROM (
SELECT
COUNT(DISTINCT(ID)) as c
FROM
my_table
WHERE
ID IN (1,2,3,4,5,6)
) as tmp
并找出哪些丢失了:
SELECT
zID
FROM (
SELECT 1 as zID UNION
SELECT 2 as zID UNION
SELECT 3 as zID UNION
SELECT 4 as zID UNION
SELECT 5 as zID UNION
SELECT 6 as zID UNION
SELECT 7 as zID UNION
SELECT 8 as zID UNION
SELECT 9 as zID UNION
SELECT 10 as zID UNION
SELECT 11 as zID UNION
SELECT 12 as zID UNION
SELECT 13 as zID UNION
SELECT 14 as zID UNION
SELECT 15 as zID UNION
) as t1
LEFT JOIN (
SELECT
DISTINCT(ID) as mID
FROM
my_table
) as t2
ON t1.zID = t2.mID
WHERE
t2.mID IS NULL
这将返回列表中不在表中的ID列表
SELECT t1.id
FROM (SELECT 1 id
UNION
SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6) t1
LEFT JOIN MyTable t2
ON t1.id = t2.id
WHERE t2.id IS NULL
如果您经常这样做,您可能希望创建一个包含常量的永久表,例如
CREATE TABLE numbers (id int primary key);
INSERT INTO numbers (id) VALUES (0), (1), (2), ..., (1000);
然后你可以做:
SELECT t1.id
FROM numbers
JOIN MyTable t2
ON t1.id = t2.id
WHERE t1.id IN (1, 2, 3, 4, 5, 6)
AND t2.id IS NULL
这将返回列表中不在表中的ID列表
SELECT t1.id
FROM (SELECT 1 id
UNION
SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6) t1
LEFT JOIN MyTable t2
ON t1.id = t2.id
WHERE t2.id IS NULL
如果您经常这样做,您可能希望创建一个包含常量的永久表,例如
CREATE TABLE numbers (id int primary key);
INSERT INTO numbers (id) VALUES (0), (1), (2), ..., (1000);
然后你可以做:
SELECT t1.id
FROM numbers
JOIN MyTable t2
ON t1.id = t2.id
WHERE t1.id IN (1, 2, 3, 4, 5, 6)
AND t2.id IS NULL
您在谈论哪个表?如何比较列表和包含id的表?这两列是在同一个表中吗?您只需要知道有多少列,还是需要知道缺少了哪些列?@SashiKant Kant-Mysql table@kevinm-它在表中的第一列。您在谈论哪个表?如何比较列表和包含id的表?这两列在同一个表中吗?你只需要知道有多少列,或者您需要知道缺少哪些?@SashiKant Kant-Mysql Table.@kevinm-表中的1列。@Stephan-我想要Id列表's@Hacker我已经添加了对的查询that@Stephan-但我有100-200个身份证's@Hacker我刚刚看到更新的问题,我已经更新了查询again@Stephan-我要身份证的清单's@Hacker我添加了查询that@Stephan-但我有100-200个身份证's@Hacker我刚刚看到更新的问题,我已经更新了查询again@Barmar-但我有100-200个身份证's@Hacker看我的第二个版本+1,我也试过同样的版本@巴尔马-但我得到了100-200个ID的列表's@Hacker看我的第二个版本+1,我也试过同样的版本。