【问题标题】:SQL Query for a join on a table with mulitple matching rows对具有多个匹配行的表进行联接的 SQL 查询
【发布时间】:2011-10-11 02:42:31
【问题描述】:

编辑:我最初的描述不是很清楚,所以让我重新开始:

我有一个表 x,其中包含列 a、b 和 c,我想从表 y 中查询内容,其中 y.a = x.a AND 在表 x 中有一行 x.b = (arg1) AND x.c = (arg2)并且 x 中存在另一行,其中 x.b = (arg3) 和 x.c = (arg4)

所以在这个测试用例中传入值 (3, 4, 6, 12) 将返回 a1。希望能解决问题。

|-------|----------|----------|
|   a   |     b    |     c    |
|-------|----------|----------|
|   1   |     3    |     4    |
|   1   |     6    |     12   |
|   2   |     6    |     33   |

【问题讨论】:

    标签: sql join


    【解决方案1】:

    这听起来像是父 -> 子表关系之间的基本一对多 (1:M) 连接。如果是这样,基本的 INNER JOIN 将返回父表和子表之间的所有匹配行。父列(如果包含在 SELECT 子句中)将为子表中的每个匹配行重复。

    父子节点之间的左外连接将返回父节点的所有行和子节点的匹配行。如果子表中缺少 ID 值,则通常返回 NULL 值来代替任何数据。

    希望这会有所帮助。

    【讨论】:

    • 自从康纳修改了这个问题,我的回答不再完全适用。感谢那些根据原始问题“投票”的人。
    【解决方案2】:
    Select *
      from y
     where exists( select *
                     from x
                    where y.a = x.a
                      and x.b = 3
                      and x.c = 4 )
       and exists( select *
                     from x
                    where y.a = x.a
                      and x.b = 6
                      and x.c = 12 )
    

    【讨论】:

      【解决方案3】:

      左连接...?

      您的问题似乎很简单 - 您能否提供一些详细信息(表架构等)以便我们提供更多帮助?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-29
        • 2015-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多