SQL从查询中的数据中选择此数据尚未存在于数据库中?

时间:2010-04-05 19:59:19

标签: sql mysql

我想在进行Web服务调用之前检查我的数据库中是否有我已记录的记录。

这是我想象的查询,我似乎无法弄清楚语法。

SELECT * 
  FROM (1,2,3,4) as temp_table 
 WHERE temp_table.id 
LEFT JOIN table ON id IS NULL 

有办法做到这一点吗?什么是这样的查询?

我想将id的列表传递给mysql,我希望它能够吐出数据库中尚未存在的id?

5 个答案:

答案 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
);