【问题标题】:How do a return has-many relations across two tables that have more than one row in the aggregate?两个表之间的返回有多关系如何在聚合中具有多于一行?
【发布时间】:2012-10-15 21:51:12
【问题描述】:

我正在尝试在两个表之间编写一条 SQL 语句,其中两个表之间存在单向关系,并且仅返回具有多个关系的行。我的措辞可能很糟糕,所以这里是示例。

假设表 A 有一个列“key_a”,它是表 A 的主键。表 B 有两列。第一列称为“key_b”,它是表 B 的主键,第二列称为“key_a”,它是与“A.has_a”相关的外键。已实现应用程序逻辑,以确保虽然表 A 中的行条目可以与表 B 中的 0 到 n 行有关系,但表 B 中的行与表 A 中的一行正好有关系。

我如何编写一个 SQL 查询来返回“A.key_a”中的行条目,这些条目在表 B 中有不止一行通过“B.key_a”列映射到它?

【问题讨论】:

    标签: sql oracle count group-by having


    【解决方案1】:
    SELECT key_a, a.<<other columns>>, COUNT( b.key_b )
      FROM table_a a
           JOIN table_b b USING (key_a)
     GROUP BY key_a, a.<<other columns>>
    HAVING COUNT( b.key_b ) > 1
    

    将为您提供来自table_a 的数据,其中table_b 中有多个匹配行。如果您只对获取在table_b 中具有多行的key_a 值感兴趣,而不是从table_a 获取所有数据,则可以完全删除对table_a 的引用,只需执行GROUP BY 和@ 987654329@table_b

    【讨论】:

    • 这几乎奏效了。我应该指定这是一个 Oracle 数据库,其中 USING 子句由于限定符使用的不同而影响 SELECT 语句。
    猜你喜欢
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 2016-12-03
    相关资源
    最近更新 更多