简单的问题,但我画了一个空白。任何帮助表示赞赏。
我有一张ids表:
-------
| ids |
-------
| 1 |
| 5 |
| 7 |
-------
除了实际表格长达数千个条目。
我有一个列表(x
),而不是表格,其他ID,比如说2,6,7。我需要查看来自x
的哪些ID不在ids
中} table。
我需要回来(2,6)
。
我试过这样的事情:
SELECT id FROM ids WHERE id IN (2,6,7) GROUP BY id HAVING COUNT(*) = 0;
但是,COUNT(*)
仅返回检索到的行数,它不会返回0.
有什么建议吗?
答案 0 :(得分:2)
尝试使用“NOT IN”子句:
select * from
(SELECT 2 as id
UNION ALL
SELECT 6 as id
UNION ALL
SELECT 7 as id) mytable
WHERE ID not in (SELECT id FROM ids)
请参阅小提琴here
答案 1 :(得分:2)
创建一个临时表,在其中插入所需的ID,然后运行连接,如下所示:
CREATE TEMPORARY TABLE temp_wanted (id BIGINT);
INSERT INTO temp_wanted(id) VALUES (2),(6),(7);
SELECT id
FROM temp_wanted t
LEFT OUTER JOIN ids i ON i.id=t.id
WHERE i.id IS NULL