我在网上碰到一个练习题,但找不到满意的答案。
假设我们有两个看起来像这样的表
如果是这种情况,那么下面的SQL有什么问题(如果有的话)?
SELECT Name
FROM Orders, Salesperson
WHERE Orders.salesperson_id = Salesperson.ID
GROUP BY salesperson_id
HAVING COUNT( salesperson_id ) >1
此链接实际上包含问题的答案和解释。
我想我理解了解释,但是我仍然认为该查询应该运行而不会出现错误。结果也将是准确的,因为没有重复的名称(salespersonid和名称唯一匹配1:1)。
有人可以向我解释我是否错了,我在这里想念什么?
答案 0 :(得分:0)
数据库抛出错误消息,因为它无法推断每个name
都有唯一的id
。
某些数据库系统足够聪明,可以进行这种推断,但并非全部。
当然,您的查询毫无疑问是正确的;这只是您比查询优化器的人工智能更聪明的情况。
最好不要让优化器变得太聪明,这实际上是一个好主意:进行这样推论所需的周期必须用于所有所有查询,包括大多数查询不需要它。
很容易修复查询,对吧?