选择在where子句中找不到的ID

时间:2014-08-22 16:25:20

标签: mysql sql database

说我有疑问:

SELECT * FROM Parts WHERE PartID IN (id1, id2, id3, id4, id5);

如何选择我提供的在部件中找不到的ID?

我猜是这样的:

SELECT (id1, id2, id3, id4, id5) WHERE NOT IN Parts.PartID

我没有尝试从Parts表中进行选择。我正在尝试从我的ID数组中进行选择,并将其与Parts表进行比较,以查找ID数组中不在Parts表中的ID。所以说Parts表中有id2,id3,id4,查询会返回id1和id5

5 个答案:

答案 0 :(得分:2)

你可以使用这样的单个查询,使用反连接:

SELECT ids.id FROM (SELECT 'id1' AS id
                    UNION SELECT 'id2'
                    UNION SELECT 'id3'
                    UNION SELECT 'id4'
                    UNION SELECT 'id5') ids
LEFT JOIN Parts p
  ON p.PartID = ids.id
WHERE p.PartID IS NULL

答案 1 :(得分:1)

您错过了提供表名

  SELECT * FROM Parts WHERE PartID NOT IN (id1, id2, id3, id4, id5);

或尝试这样:

 select * from parts 
 where partid not in(SELECT ID FROM Parts WHERE PartID NOT IN (id1, id2, id3, id4, id5));

答案 2 :(得分:1)

尝试类似

的内容
SELECT * FROM Parts WHERE PartID NOT IN (id1, id2, id3, id4, id5);

或者

SELECT * FROM Parts WHERE PartID NOT EXISTS (id1, id2, id3, id4, id5);

答案 3 :(得分:0)

您需要在表对象或子查询中列出ID,然后才能查询:

CREATE TEMPORARY TABLE IF NOT EXISTS table1 AS (
SELECT 'id1' AS PartID
UNION
SELECT 'id2'
UNION 
SELECT 'id3'
UNION
SELECT 'id4'
UNION 
SELECT 'id5'
)

然后,您可以使用NOT EXISTS查找列表中不在Parts表格中的项目:

SELECT *
FROM Table1 a
WHERE NOT EXISTS (SELECT *
                  FROM Parts b
                  WHERE a.PartID = b.PartID)

我不太了解MySQL,也不知道你的列表是如何引入查询的,但你可能会比手动创建它更优雅地将数组转换为表格。

答案 4 :(得分:0)

SELECT ID FROM Parts WHERE PartID != 'id1' AND PartID != 'id2'... etc

现在,如果您从C#传入动态数组,则必须执行一些字符串处理和for循环(对于每个id)来创建SQL语法,这实际上非常简单。

我知道这基本上是硬编码 ......但它似乎是最简单的方法。