【发布时间】:2011-02-18 17:31:06
【问题描述】:
这是我的数据库架构
Table_A
-id
-status
Table_B
-id
Table_A_has_B
-id
-id_A
-id_B
我需要从 Table_B 中选择所有记录,其中所有关联的 Table_A 记录都有status=1,如果 Table_B 记录没有任何关联的 Table_A 也应该选择。
测试用例:
CREATE TABLE table_a (id int(2),status int(1));
INSERT INTO table_a (id, status)
VALUES (1,1),(2,0),(3,1),(4,1),(5,1);
CREATE TABLE table_b (id int(2));
INSERT INTO table_b (id) VALUES (1),(2),(3),(4);
CREATE TABLE table_a_has_b (id int(2),id_A int(2),id_B int(2));
INSERT INTO table_a_has_b (id, id_A, id_B)
VALUES(1, 1, 1),(2, 2, 1),(3, 3, 1),(4, 4, 2),(5, 5, 2),(6, 3, 4),(7, 4, 4);
查询应该选择:
+----+
|b.id|
+----+
| 2|
| 3|
| 4|
+----+
- 不应选择 ID 1,因为它的 table_a 记录之一的状态=0
- 应选择 ID 2 和 4,因为它的所有 table_a 记录的 status=1
- 应该选择Id 3,因为没有关联的table_a记录,对于相同标准的另一个观点是:应该选择Id 3,因为没有任何table_a记录,其中status=0
【问题讨论】:
-
首先,中间表中没有 b_id = 3 的条目,为什么它会显示在您的输出中?其次,有一个 b_id = 1 的条目,它与状态 = 1 的 Table_A 行相关联,为什么它没有显示在您的输出中?
-
@Thomas:我刚刚添加了关于预期结果集的解释
-
好的。直到现在,您尝试实现的目标才有意义。我已经更新了我的答案,为您的难题提供了解决方案。
-
+1 用于提供样本输入和预期输出。