我几乎可以肯定我的SQL代码问题很小,但是我一直试图让这个查询正常运行几个小时无济于事。我有一个包含3列的表:Maker,Model和Type。我试图编写一个输出" Makers"生产" PC"或"笔记本电脑",但不是"打印机"。我将在下面发布我的代码。
SELECT DISTINCT Product.maker
FROM Product
WHERE (((Product.type)="pc" Or (Product.type)="laptop")) AND ((Product.type)<>"printer");
这是一个小得多,修改过的表,类似于我正在使用的表:
maker model type
A 1001 pc
A 1002 pc
C 1007 pc
D 1008 pc
E 2003 laptop
A 2004 laptop
E 3003 printer
D 3005 printer
H 3006 printer
非常感谢任何帮助。谢谢!
答案 0 :(得分:1)
您可以将NOT EXISTS
用于此
SELECT DISTINCT P.maker
FROM Product P
WHERE (P.type="pc") Or (P.type="laptop")
AND NOT EXISTS
( SELECT 1 FROM Product P1
WHERE P.maker = P1.maker
and P1.type ="printer"
)
答案 1 :(得分:1)
这是&#34; set-within-sets&#34;查询。我喜欢使用聚合和having
子句来处理这些查询。在你的情况下:
SELECT p.maker
FROM Product as p
WHERE SUM(iif(p.type in ("pc", "laptop"), 1, 0)) > 0 AND
SUM(iif(p.type = "printer", 1, 0) = 0;
第一个条件计算的产品数量为&#34; pc&#34;或&#34;笔记本电脑&#34;并且至少需要一个。第二个计算打印机的数量,并要求没有。
这种结构在各种条件下都非常灵活。