Angenommen, ich habe die folgenden Tabellen:Wählen Sie Zeilen, in denen Feldtabelle gleiche in Verbindung in jeder Zeile ist
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);
Ich brauche eine Abfrage, die zurückkehren wird:
Parents
+------------+
| id |
+------------+
| 1 |
| 3 |
+------------+
wo id
Eltern-ID ist. Die resultierende Tabelle enthält nur die Eltern, die immer (jeden Tag) true
. Beachten Sie, dass Eltern ohne Kinder ausgeschlossen werden sollten.
Mein Versuch:
SELECT id
FROM parents p
INNER JOIN children c ON c.parent_id=p.id
WHERE c.status = TRUE
GROUP BY id
Aber es wird auch Eltern geben mit id=2
.
Ein weiterer Versuch:
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
Aber dieser Ansatz auch Eltern sind mit id=5
, die ausgeschlossen werden müssen.
Wenn 'status'' NULL' sein könnte, können Sie 'AND COUNT (*) = COUNT (status)' hinzufügen. –
Danke! Dies ist die einzige Antwort, die in allen Szenarien die richtige Antwort gibt, und sie ist auch die einfachste. – nickbusted