在这种情况下,我无法弄清楚内部联接

时间:2014-04-02 19:48:40

标签: sql oracle

  1. 我有一个名为A的表,它有一个主键A_ID
  2. 我有一个名为B的第二个表,它有一个主键B_ID和外键A_ID
  3. 我有一个名为C的第三个表,它有一个主键C_ID和一个外键B_ID以及一个名为name的行。
  4. 对于我的情况,假设表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

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

    提前致谢............

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

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

答案 1 :(得分:0)

我不确定我是否遗漏了某些内容,但如果您想要的是基于该表中可用信息的表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