当前位置:  开发笔记 > 编程语言 > 正文

选择连接表中的字段在每行中相同的行

如何解决《选择连接表中的字段在每行中相同的行》经验,为你挑选了1个好方法。

假设我有以下表格:

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,必须将其排除在外.



1> dnoeth..:

您不需要加入父母.

SELECT parent_id
FROM children
GROUP BY parent_id
HAVING MIN(Status) = 'TRUE'
   AND MAX(Status) = 'TRUE'

除了TRUE之外没有其他状态.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有