SQL不喜欢和喜欢

时间:2012-07-27 23:59:19

标签: sql-server operator-keyword sql-like

我在理解SQL中的LIKE和NOT LIKE运算符时遇到了问题。这是我执行的查询:

select serial_number from UNIT U 
group by serial_number
order by serial_number

产生2000个结果。

当我执行此查询时,我得到1950结果:

select serial_number from UNIT U 
WHERE op_name LIKE 'Assembly'
group by serial_number
order by serial_number

因此,当我执行此查询时,我希望得到50个结果,但我得到2000:

select serial_number from UNIT U 
WHERE op_name NOT LIKE 'Assembly'
group by serial_number
order by serial_number

有任何解释吗?非常感谢。

3 个答案:

答案 0 :(得分:3)

你正在做的小组使得你正在尝试的那种计数比较无效。 假设您有10个唯一的序列号,并且对于每个序列号,有两行(总共20行),一行使用op_name“Xyz”,另一行使用op_name“Assembly”。您的第一个查询将返回10行。您的第二个查询将返回10行。您的第三个查询将返回10行。由于该组,LIKE“Assembly”和NOT LIKE“Assembly”并不相互排斥。

答案 1 :(得分:2)

NULL既不是LIKE也不是NOT LIKE


实际上,更仔细地重读你的数字,可能还有其他原因。 (我之前的观点是正确的,但这种可能性更大。)

假设您有以下数据:

serial_number | op_name
--------------+---------
1             | Assembly
1             | Not
两个查询都会返回

1

答案 2 :(得分:0)

如果没有通配符%,您的LIKE就像=一样运作。

检查并查看值是什么...如果您使用的是LIKE,则最有可能使用通配符,例如:

  

从UNIT选择serial_number U WHERE op_name NOT LIKE'%Assembly%'group by serial_number order by serial_number