gpt4 book ai didi

mysql - 使用连接表 Mysql 按同一列排序

转载 作者:行者123 更新时间:2023-11-29 16:41:05 24 4
gpt4 key购买 nike

我有两张 table :母亲和 child 。每个母亲都有一个或多个 child 。

妈妈:

id | name  | age 
1 | name1 | 30
2 | name2 | 40
3 | name3 | 35

child :

id | name   | age | id_mother
1 | child1 | 15 | 1
2 | child2 | 10 | 2

我想要的结果是按年龄ASC排序母亲排序,按 child 年龄ASC排序

编辑(来自评论):我只想按最小 child 年龄(如果有 child )排序,然后按母亲年龄排序。

例如:

id | name  | age 
2 | name2 | 40
1 | name1 | 30
3 | name3 | 35

我尝试了这个sql:

SELECT * 
FROM mother m
ORDER BY m.age asc , (SELECT MIN(age) FROM child c WHERE c.id_mother == m.id)

但它只给出按年龄排序的母亲?

最佳答案

我认为您只想按最低 child 年龄(如果有 child )进行排序,然后按母亲年龄进行排序。

  • 在相关子查询中,您可以获取母亲 child 的最小年龄(如果存在)。
  • ORDER BY 中,我们将使用 IS NOT NULL 将存在最小 child 年龄值的案例放在首位。

尝试:

SELECT
m.*,
(SELECT MIN(c.age)
FROM child AS c
WHERE c.id_mother = m.id) AS min_child_age
FROM mother AS m
ORDER BY
min_child_age IS NOT NULL DESC,
min_child_age ASC,
m.age ASC
<小时/>

架构 (MySQL v5.7)

create table mother 
(id int, name varchar(8), age int);

insert into mother values
(1, 'name1', 30), (2, 'name2', 40), (3, 'name3', 35);


create table child
(id int , name varchar(8), age int, id_mother int);

insert into child values
(1 , 'child1' , 15 , 1 ),
(2 , 'child2' , 10 , 2);
<小时/>

结果

| id  | name  | age | min_child_age |
| --- | ----- | --- | ------------- |
| 2 | name2 | 40 | 10 |
| 1 | name1 | 30 | 15 |
| 3 | name3 | 35 | |
<小时/>

View on DB Fiddle

关于mysql - 使用连接表 Mysql 按同一列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53336680/

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