说我有疑问:
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
答案 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语法,这实际上非常简单。
我知道这基本上是硬编码 ......但它似乎是最简单的方法。