sql - 如何使用来自表 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 对。
我怎样才能做到这一点?
解决方案
您可以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
。
推荐阅读
- c# - 递归错误 - 无法访问
- swift - Swift 4 说这两行已被弃用...尝试了一切
- html - 输入的奇怪轮廓:焦点
- c++ - 使用范围解析运算符初始化基类成员
- windows - Python spyder + tensorflow 交叉验证在 Windows 10 上冻结
- angular - Angular 5 公共变量在导航后变得未定义
- arrays - 如何快速将字典 [String:Bool] 转换为数组 [String]?
- python - BeautifulSoup 如何索引标签对象
- google-app-engine - 延迟测试清理的行为因我调用它的位置而异
- laravel - 如何在 laravel 护照中为特定客户设置特定范围