我在理解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
有任何解释吗?非常感谢。
答案 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