当我在查询的WHERE语句中多次在SQL查询中使用!=运算符时,它似乎不起作用,但是当我使用NOT IN运算符时,它确实起作用。我和我的同事看着它,我们不知道为什么。
这是一个查询,它将从不包含某些值的表中选择记录,因此为什么我要使用NOT IN和!=。
-- With NOT IN (this works).
SELECT SUM(ACTUAL_COST_FW)
FROM COSTINGS_FW
WHERE COSTINGS_FW.VEHICLE_ID_FW = '1234' AND
COSTING_CODE_FW NOT IN ('TYRES-P', 'TYRES-L', 'TYRES-E-P', 'TYRES-E-L',
'ROADTAX', 'MISC', 'LEASE', 'INSURANCE', 'FUEL', 'DP', 'ACCIDENT')
-- Without NOT IN (this doesn't work).
SELECT SUM(ACTUAL_COST_FW)
FROM COSTINGS_FW
WHERE COSTINGS_FW.VEHICLE_ID_FW = '1234' AND
(COSTING_CODE_FW != 'TYRES-P' OR
COSTING_CODE_FW != 'TYRES-L' OR
COSTING_CODE_FW != 'TYRES-E-P' OR
COSTING_CODE_FW != 'TYRES-E-L' OR
COSTING_CODE_FW != 'ROADTAX' OR
COSTING_CODE_FW != 'MISC' OR
COSTING_CODE_FW != 'LEASE' OR
COSTING_CODE_FW != 'INSURANCE' OR
COSTING_CODE_FW != 'FUEL' OR
COSTING_CODE_FW != 'DP' OR
COSTING_CODE_FW != 'ACCIDENT')
使用带有!OR关键字的多个!=运算符,它将返回一条记录(在“ VEHICLE_ID_FW”字段中包含“ 1234”),我知道在“ COSTING_CODE_FW”字段中也包含“ TYRES-L”我使用'NOT IN'运算符,它没有按原样返回该记录。有什么想法吗?
答案 0 :(得分:4)
您的OR
s应该是AND
s。如果某值等于“ TYRES-P”,则它不等于下一个值。 OR
ed表达式始终乘积TRUE –除非列为NULL
。
答案 1 :(得分:0)
WHERE col NOT IN ('p', 'b', 'c')
等价
WHERE col <> 'p'
AND col <> 'b'
AND col <> 'c';
所以您必须在内部使用AND
而不是or