有没有办法只检索IN(或NOT IN)子句中与表中的记录不匹配的值?

时间:2011-11-01 13:45:20

标签: php mysql where-in

这可能是一个奇怪的问题。目前,我有一个包含大量数据的表。使用PHP,我动态创建IN子句。

SELECT * FROM table
WHERE field IN ('str1', 'str2', [...])

假设没有与'str1'或'str2'匹配的记录,有没有办法检索'str1'和'str2'?

3 个答案:

答案 0 :(得分:1)

SELECT dmy.id
FROM (
   SELECT 'str1' as id
   UNION ALL
   SELECT 'str2' 
   UNION ALL
   .....
) dmy
LEFT JOIN some_table ON some_table.field = dmy.id
WHERE some_table.field IS NULL

根据特殊要求,这是一个解释:

派生表(内部选择)只创建一个包含所有所需值的“虚拟”表。然后这个虚拟表外部连接到真实表。外部联接表(some_table)中没有值(NULL)的任何内容都不存在于虚拟“表”的值列表中。

要查看派生表的效果,只需在没有连接的情况下单独运行它:

SELECT dmy.id
FROM (
   SELECT 'str1' as id
   UNION ALL
   SELECT 'str2' 
   UNION ALL
   .....
) dmy

答案 1 :(得分:0)

在动态构建查询时,请在数组中记录str值。然后当你运行你的查询并检查结果的数量时,如果没有结果,你可以做任何你需要处理的字符串数组(我猜你想在某处记录它)。

答案 2 :(得分:0)

或者只是

SELECT field from table WHERE field IN ( .. ) GROUP BY field;

这将返回一个数组,该数组包含至少有一个匹配的值列表。 然后通过比较初始列表和获得的数组来找出没有匹配的值

很容易找出