php - 使用 SELECT NOT IN 查找不存在的 ID?

标签 php mysql

我有一个 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/

相关文章:

php - Laravel 5.4 - 查询与搜索词的关系

php - 在mysql上用foreach显示数据数组

php - Magento 如何检查购物车是否为空?

php - 每当字符串值被转换时,它就会被更改为 1 - PHP

php - 选择连接表原则 2 中的列

c# - 选择进入表命令在 C# 中不起作用

javascript - 如何使用php在浏览器关闭时更新表值

php - 如果记录存在,Laravel with() 关系

mysql 服务器已经消失

MySQL 查询按 10 天周期生成报告