gpt4 book ai didi

mysql - 从多个表中选择数据

转载 作者:行者123 更新时间:2023-11-29 08:43:35 24 4
gpt4 key购买 nike

如何通过 mysql 将多行合并为一行?

示例:

学生表

Sno.|  Name |  Subjects
1. | ABC | 1
2. | ABC | 3
3. | ABC | 4
4. | FMC | 2
5. | ABC | 4
6. | JBC | 4

论文表:

Sno. | Paper Name | Type 
1. French Optional
2. English Mandatory
3. Japenese Optional
4. Maths Optional

现在我想要这种格式

Sno.| Name|   Sub1  |  Sub2    | Sub3  |  Sub4 |
1. | ABC | French | Japenese| Maths | Null |
2. | FMC | Null | Null | Null | Null |
3. | JBC | Maths | Null | Null | Null |

我想要选择的是论文表中的论文名称和学生姓名,以及另一个表中的四个科目。我只想看看那些可选的论文。我不知道该怎么办?

最佳答案

我认为您正在寻找的概念是旋转

带有加入的版本

select 
name,
max(if(s.subject = 1 and p.type = 'Optional', p.paper_name, null)) as subject1,
max(if(s.subject = 2 and p.type = 'Optional', p.paper_name, null)) as subject2,
max(if(s.subject = 3 and p.type = 'Optional', p.paper_name, null)) as subject3,
max(if(s.subject = 4 and p.type = 'Optional', p.paper_name, null)) as subject4
from
students s
inner join
papers p on p.sno = s.subject
group by s.name

SQL Fiddle Demo

带有子选择而不是连接的版本

select 
name,
max(
case
when subject = 1
then (select paper_name from papers p where p.sno = subject and type = 'Optional')
else
null
end) as subject1,
max(
case
when subject = 2
then (select paper_name from papers p where p.sno = subject and type = 'Optional')
else
null
end) as subject2,
max(
case
when subject = 3
then (select paper_name from papers p where p.sno = subject and type = 'Optional')
else
null
end) as subject3,
max(
case
when subject = 4
then (select paper_name from papers p where p.sno = subject and type = 'Optional')
else
null
end) as subject4
from
students
group by
name

SQL Fiddle Demo

关于mysql - 从多个表中选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13108767/

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