FROM 子句中子查询的替代方法
Alternative for subquery in the FROM clause
我的这个查询在 FROM 子句中有子查询
SELECT x, y
FROM FOO
WHERE y IN (SELECT y
FROM
(SELECT y, z, MIN(v)
FROM BAR
GROUP BY y, z))
教class的教授说不是所有的数据库都支持,我应该只在WHERE
子句中使用子查询。
我正在尝试将上面的查询转换为不在 FROM
子句中使用子查询,但无法解决这个问题。
有什么想法吗?
这回答了问题的原始版本。
所有数据库都支持 FROM
子句中的子查询。
正如所写,聚合是完全没有必要的。您正在比较 y
个值。 v
的计算无关紧要。所以,你不妨这样写:
SELECT x, y
FROM FOO
WHERE y in (SELECT y FROM BAR)
首先,sub-query:
SELECT y FROM ( SELECT y,z min(v) FROM BAR groupby y,z)
除了在 z
之后缺少一个逗号和在 group
和 by
之间缺少一个 space 之外,相当于:
SELECT y from (SELECT DISTINCT y, z FROM BAR) sq1
相当于:
SELECT y from (SELECT DISTINCT y FROM BAR) sq1
相当于:
SELECT DISTINCT y FROM BAR
所以:
SELECT x, y
FROM FOO
WHERE y in (
SELECT DISTINCT y FROM BAR
)
您可以按照以下方式进行 -
Select distinct FOO.x,FOO.y
FROM FOO
JOIN ( SELECT y,z, min(v) FROM BAR groupby y,z) TAB
ON FOO.y = TAB.y;
我同意 Gordon 的其他评论,即聚合是完全没有必要的。但是,我已经接近您在我的回复中尝试的内容,并且仍然给出了正确的结果,同时使用 Join.
消除了额外的 sub-query
我的这个查询在 FROM 子句中有子查询
SELECT x, y
FROM FOO
WHERE y IN (SELECT y
FROM
(SELECT y, z, MIN(v)
FROM BAR
GROUP BY y, z))
教class的教授说不是所有的数据库都支持,我应该只在WHERE
子句中使用子查询。
我正在尝试将上面的查询转换为不在 FROM
子句中使用子查询,但无法解决这个问题。
有什么想法吗?
这回答了问题的原始版本。
所有数据库都支持 FROM
子句中的子查询。
正如所写,聚合是完全没有必要的。您正在比较 y
个值。 v
的计算无关紧要。所以,你不妨这样写:
SELECT x, y
FROM FOO
WHERE y in (SELECT y FROM BAR)
首先,sub-query:
SELECT y FROM ( SELECT y,z min(v) FROM BAR groupby y,z)
除了在 z
之后缺少一个逗号和在 group
和 by
之间缺少一个 space 之外,相当于:
SELECT y from (SELECT DISTINCT y, z FROM BAR) sq1
相当于:
SELECT y from (SELECT DISTINCT y FROM BAR) sq1
相当于:
SELECT DISTINCT y FROM BAR
所以:
SELECT x, y
FROM FOO
WHERE y in (
SELECT DISTINCT y FROM BAR
)
您可以按照以下方式进行 -
Select distinct FOO.x,FOO.y
FROM FOO
JOIN ( SELECT y,z, min(v) FROM BAR groupby y,z) TAB
ON FOO.y = TAB.y;
我同意 Gordon 的其他评论,即聚合是完全没有必要的。但是,我已经接近您在我的回复中尝试的内容,并且仍然给出了正确的结果,同时使用 Join.
消除了额外的 sub-query