来自 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/