mysql - 有没有办法识别那些在 where IN() 语句中找不到的记录?

标签 mysql

来自 PHP 代码 $Lines 被定义为加入列表,例如123,146,165,1546,455,155

plant 表具有最高 idPlant(唯一标识符)例如 1000 的顺序记录。

我的简单 SQL 查询:

SELECT * FROM plant WHERE `plant`.idPlant IN($Lines) order by plant.idPlant;

这会返回“123,146,165”等的行数据。

是否会被告知未找到“1546”? (因此用户可能输入了错字,我不能使用“确认所有数字都低于 X”,因为在真实数据中 idPlant 可能不是连续的,上限会在使用过程中增加)。

更新:

希望获得能够告诉我未找到哪些数字的输出。

最佳答案

您可以使用返回所有值列表的联合构建子查询,然后针对它进行 LEFT JOIN,检查 WHERE 子句中的 NULL 以查找不匹配的值。

基本的 php 应该是这样的:-

<?php

$sub_array = explode(',', $Lines);

$sub = '(SELECT '.implode(' AS i UNION SELECT ', $sub_array).' AS i) sub0';

$sql = "SELECT sub0.i 
    FROM $sub
    LEFT OUTER JOIN plant 
    ON  plant.idPlant = sub0.i 
    WHERE plant.idPlant IS NULL";

?>

关于mysql - 有没有办法识别那些在 where IN() 语句中找不到的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24822294/

相关文章:

mysql - MYSQL中的CURTIME加减法

mysql - 在单个查询中选择内部联接和更新

php - 执行连接操作的简单查询

MySQL。我讨厌正则表达式。只需要一个告诉我字符串是否以数字开头

php - 对象构造函数和唯一 ID

MySQL:使用 COALESCE 创建多个变量

带日期的 Mysql 查询优化

php - Mysql加载数据infile路径错误

php - 如何在删除一对一表中的相应行时自动删除表中的行?

mysql - 更新使用单个查询连接的两个表