首页 > 解决方案 > 分组但不使用 SQL 外连接聚合,不排序

问题描述

我有两张桌子foobar. 对于每个 foo 有零个或多个酒吧。LEFT OUTER JOIN给我一个结果集就足够了,其中每一行给我一个 foo 加上它的一个条(或者NULL如果没有与 foo 关联的条)。

但是,假设我希望所有结果将 foos 组合在一起。请注意,我不希望它们聚合;也就是说,我不希望每个主键的所有 foo 行都折叠。如果有一个带有主键的 foo foo123,我只想让所有的foo123foo 一起出现。例如,我不希望有[foo123, foo123, foo456, foo123];我想要[foo123, foo123, foo123, foo456]甚至[foo456, foo123, foo123, foo123]

当然我可以按 foo 主键排序,但排序似乎有点过头了,因为我不在乎 foo 的顺序;只是所有具有相同 ID 的 foo 在结果集中出现“分组”在一起。

SQL中是否有更有效的方法可以根据某些标准“将喜欢组合在一起”而不进行排序?

我正在使用 Oracle 以防万一。

(对于它的价值,我有一个“绝妙”的想法,即使用带有相关子查询的连接,以便为每个 foo 独立查找条形,但我忘记了FROM子句中不能有相关子查询。 )

标签: sqloraclejoinsql-order-by

解决方案


我不相信有任何方法可以可靠地做到这一点,除了:

ORDER BY foo.foo_primary_key

原因是,在没有 的情况下,语句ORDER BY返回的结果顺序是undefinedSELECT

可能有一些方法可以编写查询,在您的 Oracle 版本中,将返回按您想要的方式分组的结果而不使用ORDER BY- 但这很容易发生意外更改。依赖这样的解决方案是不明智的。


推荐阅读