排除基于多个变量的记录

时间:2014-09-16 18:57:02

标签: sql ms-access

SQL noob在这里。我正在使用MS Access查询路灯数据表以排除特定大小的灯光,并且只有灯具类型是“Cobra”的变体。有人能给我一些关于我可能做错的指导吗?

我可以制作我需要被排除在外的灯光:

SELECT * 
FROM Lighting 
WHERE Lighting.TYPE_FIXTURE LIKE '*cobra*' 
AND Lighting.SIZ < '16'

足够简单。我认为这很容易调整一下,让它排除这些而不是产生它们。

SELECT * 
FROM Lighting
WHERE Lighting.TYPE_FIXTURE NOT IN ('*Cobra*') 
AND Lighting.SIZ NOT IN ('10', '15')

此代码不包括我需要排除的灯光,也包括100或150w的所有其他类型的灯光。对于我的生活,我无法弄清楚如何排除150w或更少的眼镜蛇光。

通过广泛的互联网研究,我尝试使用IIF表达式生成一个值为0或1的临时列,具体取决于是否需要排除,

SELECT *
    ,IIf(Lighting.TYPE_FIXTURE LIKE "*cobra*" AND Lighting.SIZ < 15, 0, 1) AS IncludeFlag
INTO #MyTempTable
FROM Lighting

SELECT *
FROM #MyTempTable
WHERE IncludeFlag = 1

但我唯一的结果是一条错误消息,我不知道如何解决。我花了一整天时间在这一个问题上,我开始把头发拉出来了!

2 个答案:

答案 0 :(得分:1)

试试这个......

SELECT * 
FROM Lighting 
WHERE (Lighting.TYPE_FIXTURE NOT LIKE '*cobra*' 
AND Lighting.SIZ < '16')

答案 1 :(得分:0)

从TRUE和TRUE转换为NOT(TRUE和TRUE)涉及在括号内分配NOT并将AND切换为OR。

以下内容可为您提供所需的结果:

SELECT *
FROM Lighting
WHERE Lighting.TYPE_FIXTURE Not Like '*cobra*' OR Lighting.SIZ>='16';
相关问题