以下SQL有什么问题(如果有)? (具有分组依据)

时间:2018-09-25 15:41:26

标签: sql group-by count having

我在网上碰到一个练习题,但找不到满意的答案。

假设我们有两个看起来像这样的表

Table view

如果是这种情况,那么下面的SQL有什么问题(如果有的话)?

SELECT Name
FROM Orders, Salesperson
WHERE Orders.salesperson_id = Salesperson.ID
GROUP BY salesperson_id
HAVING COUNT( salesperson_id ) >1

我从https://www.programmerinterview.com/index.php/database-sql/advanced-sql-interview-questions-and-answers/那里得到了这个问题

此链接实际上包含问题的答案和解释。

我想我理解了解释,但是我仍然认为该查询应该运行而不会出现错误。结果也将是准确的,因为没有重复的名称(salespersonid和名称唯一匹配1:1)。

有人可以向我解释我是否错了,我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

数据库抛出错误消息,因为它无法推断每个name都有唯一的id

某些数据库系统足够聪明,可以进行这种推断,但并非全部。

当然,您的查询毫无疑问是正确的;这只是您比查询优化器的人工智能更聪明的情况。

最好不要让优化器变得太聪明,这实际上是一个好主意:进行这样推论所需的周期必须用于所有所有查询,包括大多数查询不需要它。

很容易修复查询,对吧?