如何从 TABLE A 访问 TABLE C 以及来自 TABLE B 的平均值

How to access TABLE C from TABLE A with meantiming values from TABLE B

我们有 table A、B 和 C

一个

+----+-----+
| id | b_1 |
+----+-----+
|  1 |  51 |
|  2 |  52 |
|  3 |  53 |
|  4 |  54 |
+----+-----+

+----+-----+
| id | c_1 |
+----+-----+
| 51 |  71 |
| 52 |  72 |
| 53 |  73 |
| 54 |  74 |
+----+-----+

C

+----+--------+
| id | locked |
+----+--------+
| 71 |      1 |
| 72 |      0 |
| 73 |      0 |
| 74 |      1 |
+----+--------+

现在我想做这样的事情:

SELECT * FROM WHERE (SELECT locked FROM C WHERE id = (SELECT c_1 FROM B WHERE id = b_1)) = 0

所以这个伪代码的结果应该是tableA的所有值locked = 0 在 table C 中。但是为此,我必须 jump over B 并获取 id 对。

我该怎么做?

你应该使用 JOIN

SELECT *
FROM A
JOIN B ON (B.A_id = A.A_id)
JOIN C ON (C.A_id = A.A_id)

我用 A、B、C 来引用表格,用 table_id 来引用你需要 select 的 FK。

这只是一个示例,您需要根据自己的情况进行调整。

您可以在这些表之间使用 INNER JOINs :

select a.*
  from tableA a
  join tableB b on b.id = a.b_1
  join tableC c on c.id = b.c_1
 where c.locked = 0;

id  b_1
2   52
3   53

其中 returns 只有 TableA 的列值。

Demo

这是你需要的。

SELECT *
FROM A
INNER JOIN B ON (B.id = A.b_1)
INNER JOIN C ON (C.id = B.c_1)
WHERE
    c.locked=0

使用 JOIN 应该可以做到:

select *
  from A
  join B on b.id = a.b_1
  join C on c.id = b.c_1
 where c.locked = '0'

https://dbfiddle.uk/?rdbms=oracle_18&fiddle=6ef50499b7bfed71f7ec9626ad196cba

使用

 select A.*

如果你只想要 table 个元素。