我在理解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有什么解释吗?非常感谢。
发布于 2012-07-28 08:13:29
您正在进行的组操作使您尝试进行的计数比较变得不再有效。假设您有10个唯一的序列号,每个序列号都有两行(总共20行),一行是op_name "Xyz",另一行是op_name "Assembly“。您的第一个查询将返回10行。您的第二个查询将返回10行。您的第三个查询将返回10行。因为这个组,像"Assembly“和不像"Assembly”并不是相互排斥的。
发布于 2012-07-28 08:07:54
NULL既不是LIKE,也不是NOT LIKE。
实际上,重新仔细阅读你的数据,可能还有另一个原因。(我之前的观点是正确的,但这更有可能。)
假设您有以下数据:
serial_number | op_name
--------------+---------
1 | Assembly
1 | Not两个查询都将返回1。
发布于 2012-07-28 08:05:07
没有通配符%,您的LIKE就像=一样运行。
检查并查看可能的值are...most如果您使用的是LIKE,则还需要使用通配符,例如:
select serial_number from UNIT U WHERE op_name NOT LIKE '%Assembly%‘group by serial_number order by serial_number
https://stackoverflow.com/questions/11697066
复制相似问题