3

我在理解 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

有什么解释吗?谢谢一堆。

4

3 回答 3

3

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

于 2012-07-28T00:13:28.670 回答
2

NULL既不是LIKE也不是NOT LIKE什么。


实际上,更仔细地重新阅读您的数字,可能还有另一个原因。(我之前的观点是正确的,但这更有可能。)

假设您有以下数据:

serial_number | op_name
--------------+---------
1             | Assembly
1             | Not

1将由两个查询返回。

于 2012-07-28T00:07:53.790 回答
0

没有通配符,%您的LIKE操作就像=.

检查并查看这些值是什么......如果您正在使用LIKE,您很可能还想使用通配符,例如:

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

于 2012-07-28T00:05:07.010 回答