首页 > 解决方案 > 如何使用来自表 B 的中间值从表 A 访问表 C

问题描述

我们有表 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

所以这个伪代码的结果应该是表Alocked = 0的所有值与表C中的值。但为此,我必须跳过B获取 id 对。

我怎样才能做到这一点?

标签: sqlcorrelated-subquery

解决方案


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

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

它仅返回 的列值TableA

Demo


推荐阅读