gpt4 book ai didi

MySQL:根据已选行中的值选择行

转载 作者:行者123 更新时间:2023-11-30 23:03:37 24 4
gpt4 key购买 nike

我想根据已选择的行中的值从我的数据库中的连接表中选择行。基本上,如果父行或祖父行处于事件状态,则还包括结果中的子行或孙行。

我曾尝试使用 JOINSUNIONS 的不同组合来获得我想要的结果,但没有成功。

这是我的示例数据:

表 1:目标(可供成员设定为目标或完成的目标)

id   | name     | parent
---------------------------
A | Obj A | null
A1 | Obj A1 | A
A2 | Obj A2 | A
A2-1 | Obj A2.1 | A2
B | Obj B | null
B1 | Obj B1 | B
B1-1 | Obj B1.1 | B1
C | Obj C | null
C1 | Obj C1 | C
C1-1 | Obj C1.1 | C1

表 2:成员目标(目标成员已完成或设定为目标)

id | objective | member | status
-----------------------------------
1 | A | 001 | goal
2 | A1 | 001 | complete
3 | C | 001 | goal

期望的结果:连接两个表并选择状态为goalcomplete 或父级或祖父级目标具有goalcomplete 的状态。

objective | member | name     | status
------------------------------------------
A | 001 | Obj A | goal
A1 | 001 | Obj A1 | complete
A2 | 001 | Obj A2 | null
A2-1 | 001 | Obj A2-1 | null
C | 001 | Obj C | goal
C1 | 001 | Obj C1 | null
C1-1 | 001 | Obj C1.1 | null

A2C2 被包括在内,因为它们的父级 AC 的状态为 goalA2-1 以及 C1-1 都包含在内,因为它们的祖 parent 的状态为 goalB 及其子目标和孙目标不包括在内,因为 memberObjectives 表中没有状态为 B完成目标

我最近的尝试如下:

SELECT DISTINCT mo.objective, mo.member, o.name, mo.status 
FROM objectives AS o
LEFT JOIN (SELECT * FROM memberObjectives
WHERE member = '001') AS mo ON o.id = mo.objective
LEFT JOIN objectives AS o2 ON o2.id = o.parent
LEFT JOIN objectives AS o3 ON o3.id = o2.parent
GROUP BY o.id

感谢您提供的任何帮助!

最佳答案

无法测试,但试试这个:

SELECT mo.objective, mo.member, o.name, mo.status 
FROM objectives AS o
LEFT JOIN memberObjectives o.id=mo.objetive
WHERE status='goal' or status='complete'
OR o.id IN(select parent from objetives o inner join memberObjectives mo on o.parent=mo.objetive WHERE status='goal' or status='complete')

这应该为您提供状态为 goal 或 complete 的记录,以及谁的父级拥有该记录。我不由你把它延伸到祖父。希望对您有所帮助。

关于MySQL:根据已选行中的值选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22800887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com