分组但不与SQL外连接聚合,而不进行排序

时间:2018-06-09 20:24:50

标签: sql oracle join sql-order-by

我有两张表foobar。对于每个foo,都有零个或多个条形。只需要LEFT OUTER JOIN给我一个结果集,其中每行给我一个foo加上其中一个条(或NULL,如果没有与foo相关的条)。

但是,假设我希望所有结果将这些结果组合在一起。请注意,我不希望它们聚合;也就是说,我不希望每个主键的所有行foos都崩溃了。如果有主键foo123的foo,我只希望所有foo123 foos一起显示。我不希望有,例如,[foo123, foo123, foo456, foo123];我想[foo123, foo123, foo123, foo456]甚至[foo456, foo123, foo123, foo123]

当然我可以用foo主键排序,但排序看起来有点矫枉过正,因为我不关心foo的顺序;只有具有相同ID的所有foos在结果集中显示为“分组”。

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

我正在使用Oracle以防万一。

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

1 个答案:

答案 0 :(得分:4)

除了:

之外,我不相信有任何办法可靠地做到这一点
ORDER BY foo.foo_primary_key

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

可能有一些方法可以编写这样的查询,在您的Oracle版本中,将在不使用ORDER BY的情况下按照您希望的方式返回结果 - 但这很可能会出乎意料地发生变化。依靠这样的解决方案是不明智的。