【问题标题】:I cant figure out a inner join in this case在这种情况下,我无法弄清楚内部连接
【发布时间】:2014-04-03 04:07:40
【问题描述】:
  1. 我有一个名为 A 的表,它有一个主键 A_ID
  2. 我有一个名为 B 的第二个表,它有一个主键 B_ID 和一个外键 A_ID
  3. 我有第三个名为 C 的表,它有一个主键 C_ID 和外键 B_ID 以及一个称为名称的行。

对于我的情况,假设表 A 的 ID 为 1-10 B 的 ID 为 10-100,c 的 ID 为 100-1000

现在我想要以下功能:我想要表 C 中具有 B_ID 且具有外键 A_ID=3 的所有名称

所以基本上可以说表 C 中的某些名称的 B_ID 为 20,30,40,50,60,表 B 中的 B-ID 20 和 30 的 A-ID 为 3

所以我想要表 C 中只有 B_ID 的 20 和 30 的数据

我希望我足够清楚,我会提到我写的查询,但我不希望读者再感到困惑。

提前致谢…………

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    你可以试试这个:

    SELECT C.names
    FROM C
        INNER JOIN B ON C.B_ID = B.B_ID
        INNER JOIN A ON B.A_ID = A.A_ID
    WHERE A.A_ID = 3
    

    【讨论】:

    • 它正在正常执行,但我认为我没有得到任何我确信我应该得到的数据。可能我会放一些测试数据看看。等待。但无论如何对我来说看起来不错..非常感谢..感谢帮助..
    • 如果没有数据拉回,那么 B 中没有 A_ID = 3 的记录,或者 C 中没有 B_ID 指向 A_ID = 3 的记录。参见它的 sqlfiddle工作:sqlfiddle.com/#!4/b67ba/3
    【解决方案2】:

    我不确定我是否遗漏了什么,但如果您想要的只是基于该表中可用信息的表 c 中的数据,则您无需加入其他表,除非您想验证 B_ID 是出现在table b

    Select * from TableC where B_ID in (20,30)
    

    编辑: 这是整个连接,它将返回表 C 中的所有行,其中 `B

    SELECT C.*
        FROM A
        JOIN B
            ON A.A_ID = B.A_ID
            AND B.B_ID IN (20,30)
        JOIN C
            ON B.B_ID = C.B_ID
        WHERE A.A_ID = 3
    

    【讨论】:

    • 在上面的例子中,你可以写 (20,30)。如果我有数千条记录怎么办。
    • 我是根据你的陈述写的So I want data from table C that has only B_ID's 20 and 30
    • 这是一个例子,先生
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多