MySQL在所有子记录满足条件时返回父记录
我有一个MySQL语句几乎可以工作了。我只需要一个调整,让它充分发挥作用,但我不知道如何做到这一点 我希望返回父表中具有子记录的所有行,但前提是所有子状态均为1。子ID位于父表上的单个逗号分隔字段中 这是我的桌子的样子MySQL在所有子记录满足条件时返回父记录,mysql,Mysql,我有一个MySQL语句几乎可以工作了。我只需要一个调整,让它充分发挥作用,但我不知道如何做到这一点 我希望返回父表中具有子记录的所有行,但前提是所有子状态均为1。子ID位于父表上的单个逗号分隔字段中 这是我的桌子的样子 parent ID IDS 1 1001,1003,1004 2 1003, 1005 child ID STATUS 1001 1 1003 1 1004 0 1005 1
parent
ID IDS
1 1001,1003,1004
2 1003, 1005
child
ID STATUS
1001 1
1003 1
1004 0
1005 1
我希望查询只返回父ID 2,因为子记录1003和1005都是状态1。我不希望返回父ID 1,因为子记录1004状态为0
这是我目前使用的SQL,它错误地返回了两个父记录。我认为这样做是因为如果任何子记录的状态为1,它将返回父记录
SELECT *
FROM parent p
INNER JOIN child c ON c.id IN (p.ids) AND c.status = 1
GROUP BY p.id
如果所有子记录都是状态1,是否有一种简单的方法只返回父记录?我刚刚找到了答案…我只需要翻到测试,所以我不需要查找状态为1的子记录,而需要查找状态为0的子记录
SELECT *
FROM parent p
WHERE NOT EXISTS (SELECT * from child c WHERE c.id in (p.ids) and c.status = 0)
GROUP BY p.id
我刚刚得到了答案…我只需要切换到测试,所以我不需要查找状态为1的子记录,而需要查找状态为0的子记录
SELECT *
FROM parent p
WHERE NOT EXISTS (SELECT * from child c WHERE c.id in (p.ids) and c.status = 0)
GROUP BY p.id
首先,这不是一个好的设计。您应该在另一个表中存储一对多关系 现在,就回答这个问题而言,可以通过以下查询完成:
select p.id
from parent p
where p.ids in (
select group_concat(id)
from child
where p.ids like CONCAT('%', id, '%')
and status = 1
group by p.id
);
给你。
请注意,这取决于父记录保存时子记录ID的排序方式。首先,这不是一个好的设计。您应该在另一个表中存储一对多关系 现在,就回答这个问题而言,可以通过以下查询完成:
select p.id
from parent p
where p.ids in (
select group_concat(id)
from child
where p.ids like CONCAT('%', id, '%')
and status = 1
group by p.id
);
给你。
请注意,这取决于父记录保存时子记录ID的排序方式。谢谢Darshan。不过我更喜欢我的SQL,因为它对我来说更干净!我接受你关于一对多关系的观点,但恐怕这就是表的设计方式,所以我必须使用它:(谢谢Darshan。我更喜欢我的SQL,因为它对我来说似乎更干净!我接受你关于一对多关系的观点,但恐怕这就是表的设计方式,所以我必须使用它:(