这可能是一个奇怪的问题。目前,我有一个包含大量数据的表。使用PHP,我动态创建IN子句。
SELECT * FROM table
WHERE field IN ('str1', 'str2', [...])
假设没有与'str1'或'str2'匹配的记录,有没有办法检索'str1'和'str2'?
答案 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;
这将返回一个数组,该数组包含至少有一个匹配的值列表。 然后通过比较初始列表和获得的数组来找出没有匹配的值
很容易找出