假设我有以下表格:
CREATE TABLE parents ( id int primary key ); CREATE TABLE children ( parent_id int, --id from parents day int, status bool, } INSERT INTO parents (id) VALUES (1); INSERT INTO children (parent_id, day, status) VALUES (1, 1, TRUE); INSERT INTO children (parent_id, day, status) VALUES (1, 2, TRUE); INSERT INTO parents (id) VALUES (2); INSERT INTO children (parent_id, day, status) VALUES (2, 1, TRUE); INSERT INTO children (parent_id, day, status) VALUES (2, 2, FALSE); INSERT INTO parents (id) VALUES (3); INSERT INTO children (parent_id, day, status) VALUES (3, 1, TRUE); INSERT INTO parents (id) VALUES (4); INSERT INTO children (parent_id, day, status) VALUES (4, 1, FALSE); INSERT INTO parents (id) VALUES (5);
我需要一个将返回的查询:
Parents +------------+ | id | +------------+ | 1 | | 3 | +------------+
id
父母在哪里.结果表仅包含始终(任何一天)的父项true
.请注意,应排除没有孩子的父母.
我的尝试:
SELECT id FROM parents p INNER JOIN children c ON c.parent_id=p.id WHERE c.status = TRUE GROUP BY id
但它也会给父母带来帮助id=2
.
另一种尝试:
SELECT id FROM parents p LEFT OUTER JOIN children c ON c.parent_id=p.id AND c.status=FALSE WHERE c.status IS NULL GROUP BY id
但这种方法也将包括父母id=5
,必须将其排除在外.
您不需要加入父母.
SELECT parent_id FROM children GROUP BY parent_id HAVING MIN(Status) = 'TRUE' AND MAX(Status) = 'TRUE'
除了TRUE之外没有其他状态.