gpt4 book ai didi

MySql加入多对一但根据条件只获得一条相关记录

转载 作者:行者123 更新时间:2023-11-29 04:38:33 25 4
gpt4 key购买 nike

我想加入多对一关系,但根据条件选择要加入的记录之一,在本例中为最大日期。这是一个简化的架构;

parent
---------
id | name
---------
1 | Bob
2 | Mary
3 | Pat

child
----------------------------------
id | parent_id | name | birthdate
----------------------------------
11 | 1 | Anne | 2014-01-01
12 | 2 | Jane | 2014-01-02
13 | 3 | John | 2016-06-01
14 | 1 | Mark | 2016-08-01
15 | 2 | Jack | 2016-01-01
16 | 2 | Jill | 2016-01-01

parent 可以有零个或多个 child 。 child 的出生日期可以是 future (怀孕)。同一 parent 的两个 child 可以有相同的生日(双胞胎)。

我想获取 parent 记录和他们最小的 child 。对于最小的双胞胎,我不在乎选择哪个 child 。所以在这种情况下,Bob 有两个 child ,他们最小的 child 是 Mark,他将于 8 月 8 日出生。Mary 有 3 个 child 。她最小的两个是双胞胎, jack 和吉尔。帕特没有 child 。所以我想得到;

id | name | child | birthdate
-----------------------------
1 | Bob | Mark | 2016-08-01
2 | Mary | Jack | 2016-01-01
3 | Pat | null | null

是否可以在单个查询中执行此操作?

最佳答案

SELECT p.id, p.name, c.name, birthdate FROM parent p
LEFT JOIN child c ON p.id = c.parent_id AND c.birthdate <= NOW()
WHERE c.birthdate IS NULL OR birthdate = (SELECT MIN(birthdate) FROM child c2 WHERE c2.parent_id = p.id)
GROUP BY p.id

SQL fiddle 在这里。 http://sqlfiddle.com/#!9/a5fec2/2

注意:输入数据已稍作修改以获得您想要的输出。

关于MySql加入多对一但根据条件只获得一条相关记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35210707/

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