在SQL中使用NOT IN时,使用!=会给我带来不同的结果

时间:2019-05-21 16:48:52

标签: sql

当我在查询的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'运算符,它没有按原样返回该记录。有什么想法吗?

2 个答案:

答案 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