【发布时间】:2019-05-05 14:17:50
【问题描述】:
在练习编写 SQL 查询时,我注意到我无法以类似于以下的形式执行查询:
(1)
SELECT attr1, attr2 FROM
(SELECT attr1, attr2 FROM ...) AS table
WHERE attr1 >= ALL
(SELECT attr1 FROM table)
(1) 中的想法是我从别名为“表”的内部查询中进行选择。我还想添加一个 WHERE 子句来应用比较并获得我想要的查询结果。所以我将属性与“表”中的属性进行比较。
在这种特定情况下,我选择了所有在分配了别名“表”的内部查询结果中获得最大值的 attr1。
但是上面的例子不起作用,我得到一个错误。
我意识到如果我执行以下操作,我将获得查询结果:
(2)
SELECT attr1, attr2 FROM
(SELECT attr1, attr2 FROM ...) AS alias1
WHERE attr1 >= ALL
(SELECT attr1 FROM ...)
两个内部查询是相同的,除了 attr2 在第二个查询中不存在。
我对查询 (2) 的唯一问题是,如果内部查询很长,那么您实际上是在复制和粘贴一大块代码,以便在 WHERE 子句下再次重用。
我的问题是为什么查询 (1) 无效,以及查询 (2) 是否有更好的替代方案。
【问题讨论】:
-
如果
WHERE应该适用于内部查询,则尝试将其添加到内部而不是外部查询。 -
您的第二个查询没有意义。
where子句中有一个别名。示例数据、期望的结果以及您想要实现的逻辑的解释都非常有用。 -
这是我的错误,我并不是要在
where子句中放置别名。现在会修复它