sql - 分组但不使用 SQL 外连接聚合,不排序
问题描述
我有两张桌子foo
和bar
. 对于每个 foo 有零个或多个酒吧。LEFT OUTER JOIN
给我一个结果集就足够了,其中每一行给我一个 foo 加上它的一个条(或者NULL
如果没有与 foo 关联的条)。
但是,假设我希望所有结果将 foos 组合在一起。请注意,我不希望它们聚合;也就是说,我不希望每个主键的所有 foo 行都折叠。如果有一个带有主键的 foo foo123
,我只想让所有的foo123
foo 一起出现。例如,我不希望有[foo123, foo123, foo456, foo123]
;我想要[foo123, foo123, foo123, foo456]
甚至[foo456, foo123, foo123, foo123]
。
当然我可以按 foo 主键排序,但排序似乎有点过头了,因为我不在乎 foo 的顺序;只是所有具有相同 ID 的 foo 在结果集中出现“分组”在一起。
SQL中是否有更有效的方法可以根据某些标准“将喜欢组合在一起”而不进行排序?
我正在使用 Oracle 以防万一。
(对于它的价值,我有一个“绝妙”的想法,即使用带有相关子查询的连接,以便为每个 foo 独立查找条形,但我忘记了FROM
子句中不能有相关子查询。 )
解决方案
我不相信有任何方法可以可靠地做到这一点,除了:
ORDER BY foo.foo_primary_key
原因是,在没有 的情况下,语句ORDER BY
返回的结果顺序是undefined。SELECT
可能有一些方法可以编写查询,在您的 Oracle 版本中,将返回按您想要的方式分组的结果而不使用ORDER BY
- 但这很容易发生意外更改。依赖这样的解决方案是不明智的。
推荐阅读
- python - Python 获取公共 GitHub 存储库中的 csv 文件列表
- flutter - Flutter:尽管用户已在 Firebase Auth 中注册,但一次又一次发送 OTP
- dependency-injection - 如何在 NestJS 中使用文字类型作为服务构造函数参数
- c# - 从同一列中具有两个条件的表中选择的更好方法是什么?
- php - PHP将bind_result字段保存在逗号分隔值中,然后插入另一个表
- angular - 如何仅显示月份,不包括日期和年份
- angular - 在 Angular 应用程序 (SCSS) 中导入的字体不会在其他设备上加载
- python - 包含 AM/PM 的字符串的日期时间对象
- javascript - 在大小为 k 的交替块中反转字符串
- xamarin - 即使遵循 Xamarin 论坛中提到的步骤,WebUI 仍弃用邮件