我有一个 ID 列表,以逗号分隔存储为字符串。
123,456,789
我以前使用类似这样的方法为数据库中存在每个 ID 的每一行提取数据:
SELECT id, name FROM line_item WHERE id IN (123,456,789)
但是,我只想确定数据库中不存在的 ID。例如。检查表以返回数据库中不存在的所有 ID。
我尝试了 NOT IN
假设它会起作用,但当然,我得到的只是每个与我的样本不匹配的 ID,这是巨大的(数千行,我们的 ID 数量很少)通常需要检查)。
SELECT id FROM line_item WHERE id NOT IN (123,456,789)
例如:
表:ID
111
222
333
444
555
777
999
字符串:
111,222,666,888,999
查询应该返回:
666,888
如果不使用 PHP,我可以使用 MySQL 找到那些不存在的值。
最佳答案
您可以创建填充有所需 id
值的附加表,并使用带有 LEFT JOIN 和 WHERE 子句的查询 -
CREATE TABLE temp_table(id INT);
INSERT INTO temp_table VALUES(123),(456),(789);
SELECT t1.id FROM temp_table t1
LEFT JOIN line_item t2
ON t1.id = t2.id
WHERE t2.id IS NULL;
另一种变体:
SELECT t1.id FROM (SELECT 123 id UNION SELECT 456 UNION SELECT 789) t1
LEFT JOIN line_item t2
ON t1.id = t2.id
WHERE t2.id IS NULL;
关于php - 使用 SELECT NOT IN 查找不存在的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13607128/