MySQL:当子项符合条件时选择父项
我有以下情况 表“parent”具有父对象:MySQL:当子项符合条件时选择父项,mysql,join,parent,subquery,Mysql,Join,Parent,Subquery,我有以下情况 表“parent”具有父对象: +-----+-------------------+ | UID | some_parent_stuff | +-----+-------------------+ | 1 | value01 | +-----+-------------------+ | 2 | value02 | | | | 表子对象具有指向父对象的引用列和状态: +-----+---
+-----+-------------------+
| UID | some_parent_stuff |
+-----+-------------------+
| 1 | value01 |
+-----+-------------------+
| 2 | value02 |
| | |
表子对象具有指向父对象的引用列和状态:
+-----+-------------+------------+
| UID | parent_uid | status_uid |
+-----+-------------+------------+
| 1 | 2 | 1 |
+-----+-------------+------------+
| 2 | 2 | 5 |
+-----+-------------+------------+
| 3 | 1 | 2 |
| | | |
现在我想选择所有的父母,其中UID最高的孩子在列表中有一个状态UID(即在(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较高的子级,其状态不在in子句中。所以我不想选择它
我希望你能理解我的问题,我的英语不是最好的。。。谢谢您的建议,并致以最诚挚的问候
克尤泽
如果我理解了您的要求,那么这应该是可行的,但是这没有经过测试,您也可以在这里查看mysql子查询我认为您需要的是查询中的查询(在我的示例中是PreQuery)。内部查询以每个父id为基础,即最大子级uid,而不考虑符合条件的状态id。由于这是按父项分组的,因此它将为每个示例数据返回两条记录
Child Table
UID Parent Status
2 2 5
3 1 2
现在,您可以通过此预查询在各自ID上连接到父表和子表,并在第二个子级连接处,将状态条件添加到(1,5)
这将仅返回子ID 2、父ID 2、状态5的1记录。由于子ID 3的状态为2,因此它不会在最终结果集中返回。谢谢您的回答。这将我推向正确的方向。但我把它简化得太多了。。。如果子表有一列“crdate”(timestamp),该怎么办?该列必须是最高值。我无法比较MAX(crdate)的值,因为在某些情况下它不是唯一的。@Kjuuze,那么您所要做的就是将MAX(c.uid)更改为MAX(c.crdate),然后将PreQuery MAX date列的连接也更改为相同的MAX date。
Child Table
UID Parent Status
2 2 5
3 1 2
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 )