我有以下情况。
表“parent”具有父对象:
+-----+-------------------+
| UID | some_parent_stuff |
+-----+-------------------+
| 1 | value01 |
+-----+-------------------+
| 2 | value02 |
| | |
表子对象具有父项的引用列和状态:
+-----+-------------+------------+
| UID | parent_uid | status_uid |
+-----+-------------+------------+
| 1 | 2 | 1 |
+-----+-------------+------------+
| 2 | 2 | 5 |
+-----+-------------+------------+
| 3 | 1 | 2 |
| | | |
现在我想选择所有父母,UID最高的孩子在列表中有一个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较高的孩子,其状态不在IN-Clause中。所以我不想选择它。
我希望你理解我的问题,我的英语不是最好的......感谢你的想法和最好的问候
Kjuuze
答案 0 :(得分:0)
SELECT P.uid
FROM parent P
INNER JOIN child C ON C.parent_uid = P.uid AND C.status_uid IN(1)
WHERE C.status_uid = (
SELECT MAX(status_uid)
FROM child)
GROUP BY P.uid;
如果我理解你的要求这应该有用,但是这没有经过测试,你也可以在这里查看mysql子查询mysql
答案 1 :(得分:0)
我认为您需要的是查询中的查询(我的示例中的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,因此不会在最终结果集中返回。