Access中的SQL查询 - 即使记录与标准不匹配,仍会显示

时间:2014-11-03 01:14:19

标签: sql ms-access

我几乎可以肯定我的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

非常感谢任何帮助。谢谢!

2 个答案:

答案 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;并且至少需要一个。第二个计算打印机的数量,并要求没有。

这种结构在各种条件下都非常灵活。