Это моя схема БД.
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|
+----+
- Идентификатор 1 не должен быть выбран, так как одна из его записей table_a имеетstatus = 0
- Идентификаторы 2 и 4 должны быть выбраны, потому что все его записи table_a имеют статус = 1
- Идентификатор 3 должен быть выбран, потому что не связано с записями table_a, другая точка зрениядля того же критерия: Id 3 должен быть выбран, потому что нет никаких записей table_a, где статус = 0