gpt4 book ai didi

MySQL:当子项匹配条件时选择父项

转载 作者:行者123 更新时间:2023-11-30 22:59:41 25 4
gpt4 key购买 nike

我有以下情况。

表“parent”有父对象:

+-----+-------------------+
| UID | some_parent_stuff |
+-----+-------------------+
| 1 | value01 |
+-----+-------------------+
| 2 | value02 |
| | |

表 child 的对象具有对 parents 的引用列和状态:

+-----+-------------+------------+
| UID | parent_uid | status_uid |
+-----+-------------+------------+
| 1 | 2 | 1 |
+-----+-------------+------------+
| 2 | 2 | 5 |
+-----+-------------+------------+
| 3 | 1 | 2 |
| | | |

现在我想选择所有 parent ,其中 UID 最高的 child 在列表中有一个 status_uid(即 IN(1,5))。

我有这样的东西:

SELECT P.uid FROM parent P
INNER JOIN child C ON C.parent_uid = P.uid AND C.status_uid IN(1)
GROUP BY P.uid;

这也会返回 UID 为 2 的父对象。但是它有一个 UID 更高的 child ,其状态不在 IN-Clause 中。所以我不想选择它。

我希望你能理解我的问题,我的英语不是最好的...谢谢你的想法,并致以最诚挚的问候

库泽

最佳答案

我认为您需要的是查询中的查询(我的示例中的 PreQuery)。内部查询基于每个父 id,最大子级 uid 而不管合格状态 ID。由于这是按父级分组的,因此它将根据您的示例数据返回两条记录。

Child Table
UID Parent Status
2 2 5
3 1 2

现在,您可以通过此预查询对各自的 ID 连接到父表和子表,并在第二个 CHILD-LEVEL 连接中,为 (1,5) 中的状态添加条件

SELECT
p.uid,
p.some_parent_stuff,
c2.uid,
c2.status_uid
from
( select c.parent_uid,
MAX( c.uid ) as ChildUID
from
child c
group by
c.parent_uid ) PreQuery
JOIN Parent p
ON PreQuery.parent_uid = p.uid
JOIN Child c2
ON PreQuery.ChildUID = c2.uid
AND c2.status_id in ( 1, 5 )

这将只返回 Child ID 2、Parent 2、Status 5 的 1 条记录。由于 Child ID 3 的状态为 2,因此它不会在最终结果集中返回。

关于MySQL:当子项匹配条件时选择父项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24636414/

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