Supponiamo che io abbia le seguenti tabelle:Selezionare righe in cui il campo a far parte di tavolo è lo stesso in ogni riga
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);
Ho bisogno di una query che restituirà:
Parents
+------------+
| id |
+------------+
| 1 |
| 3 |
+------------+
dove id
sono i genitori id. La tabella risultante contiene solo i genitori che sempre (qualsiasi giorno) true
. Si noti che i genitori senza figli dovrebbero essere esclusi.
Il mio tentativo:
SELECT id
FROM parents p
INNER JOIN children c ON c.parent_id=p.id
WHERE c.status = TRUE
GROUP BY id
ma sarà anche possibile dare genitore con id=2
.
Un altro tentativo:
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
Ma questo approccio comprenderà anche genitore con id=5
, che deve essere escluso.
Nel caso in cui 'status' possa essere' NULL', è possibile aggiungere 'AND COUNT (*) = COUNT (stato)'. –
Grazie! Questa è l'unica risposta che ha dato la risposta corretta in tutti gli scenari ed è anche la più semplice. – nickbusted