我想在进行Web服务调用之前检查我的数据库中是否有我已记录的记录。
这是我想象的查询,我似乎无法弄清楚语法。
SELECT *
FROM (1,2,3,4) as temp_table
WHERE temp_table.id
LEFT JOIN table ON id IS NULL
有办法做到这一点吗?什么是这样的查询?
我想将id的列表传递给mysql,我希望它能够吐出数据库中尚未存在的id?
答案 0 :(得分:2)
使用:
SELECT x.id
FROM (SELECT @param_1 AS id
FROM DUAL
UNION ALL
SELECT @param_2
FROM DUAL
UNION ALL
SELECT @param_3
FROM DUAL
UNION ALL
SELECT @param_4
FROM DUAL) x
LEFT JOIN TABLE t ON t.id = x.id
WHERE x.id IS NULL
如果您需要支持不同数量的参数,可以使用:
答案 1 :(得分:1)
为了确认我已正确理解,您想传入一个数字列表,并查看现有表中中 中的哪些数字?实际上:
SELECT Item
FROM IDList I
LEFT JOIN TABLE T ON I.Item=T.ID
WHERE T.ID IS NULL
您似乎可以动态构建此查询,在这种情况下,您可以通过将上述内容更改为
来使用数字/计数表执行此操作SELECT Number
FROM (SELECT Number FROM Numbers WHERE Number IN (1,2,3,4)) I
LEFT JOIN TABLE T ON I.Number=T.ID
WHERE T.ID IS NULL
由于查询的构建方式,这相对容易受到SQL注入攻击。如果你可以将'1,2,3,4'作为一个字符串传入并将其分成若干部分来生成你的数字列表以更安全的方式加入,那会更好 - 例如,如何做到这一点,请参阅http://www.sqlteam.com/article/parsing-csv-values-into-multiple-rows
所有这些都假设你的数据库中有一个数字/计数表,但它们总体上非常有用,我强烈建议你这样做。
答案 2 :(得分:0)
SELECT * FROM table where id NOT IN (1,2,3,4)
答案 3 :(得分:0)
我可能只会这样做:
SELECT id
FROM table
WHERE id IN (1,2,3,4);
然后处理结果列表,从“要提交的记录”列表中删除查询返回的任何内容。
答案 4 :(得分:0)
嵌套查询怎么样?这可能有效。如果没有,它可能会让你朝着正确的方向前进。
SELECT * FROM table WHERE id NOT IN (
SELECT id FROM table WHERE 1
);