【发布时间】:2020-06-11 01:05:28
【问题描述】:
我问了一个related 的问题,但后来意识到我问的用例是错误的。所以现在问正确。
我有 3 张桌子:
TableA - Id, TableB_id
TableB - Id, Name, TableC_id
TableC - Id, Valid
有效值可以是 0 或 1。
TableA -> TableB 和 TableB -> TableC 之间是一对多的关系。
我想获取 TableC.valid = 0 的 TableA 和 TableB 的所有记录。
另外,如果 TableC 的所有记录对于 TableB 的有效 = 1,则仅获取 TableA 和 TableB 的数据。
换句话说,数据是这样的:
表A:
+----+-----------+
| ID | TableB_Id |
+----+-----------+
| 1 | 100 |
| 2 | 101 |
| 3 | 101 |
| 4 | 102 |
+----+-----------+
表B:
+-----+------+-----------+
| Id | Name | TableC_id |
+-----+------+-----------+
| 100 | Adam | 200 |
| 101 | Nick | 201 |
| 102 | Jim | 202 |
+-----+------+-----------+
表C:
+-----+-------+
| Id | Valid |
+-----+-------+
| 200 | 0 |
| 201 | 0 |
| 202 | 1 |
+-----+-------+
所以结果是:
+-----------+-----------+------+-----------+
| TableA_ID | TableB_ID | Name | TableC_ID |
+-----------+-----------+------+-----------+
| 1 | 100 | Adam | 200 |
| 2 | 101 | Nick | 201 |
| 3 | 101 | Nick | 201 |
| 4 | 102 | Jim | null |
+-----------+-----------+------+-----------+
我已经为第一部分编写了查询,但是如何包含第二个条件?
查询:
Select
a.id,
b.id,
b.name,
c.id
from
TableA a
inner join TableB b on a.TableB_id = b.id
inner join TableC c on b.TableC_id = c.id
where
c.valid = 1;
【问题讨论】:
-
"...如果 TableC 的所有记录都有效 = 1 对于 TableB" 我希望我能理解!