mysql - 如何从单行表中获取多行?

标签 mysql sql inner-join union

您好,我有两个具有以下结构的表

学生

 +------+------+------+-------+------+------+
| Col1 | Col2 | Col3 | Col4  | Col5 | Col6 |
+------+------+------+-------+------+------+
|   01 | Hari | 20   |    80 |   21 |   81 |
|   02 | Nari | 20   |    67 |   21 |   76 |
|   02 | Lari | 25   |    87 |   26 |   96 |
+------+------+------+-------+------+------+

这里 COl1= ID, Col2= Name,Col3= SubjectCode, COl4= Marks in Col3, Col5= subjectCpde, Col6= Marks for Col5

还有另一个名为 subjects 的表

+------+-----------+
| Col1 |   Col2    |
+------+-----------+
|   20 | English   |
|   21 | Maths     |
|   25 | Chemistry |
|   26 | Physics   |
+------+-----------+

此处 Col1= 主题代码,COl2= 主题名称 在学生表中引用。

现在我的查询应该返回如下结果。它是如何实现的?

+---------+--------+------+
| Subject |  Marks | Name |
+---------+--------+------+
| English |     80 | Hari |
| Maths   |     81 | Hari |
+---------+--------+------+

最佳答案

你可以试试这个。

使用两个查询,首先用English查询subjectCode,第二个用English查询subjectCode。然后使用 UNION ALL 将它们组合起来。

SELECT sub.Col2 as 'Subject',stu.Col4 as 'Marks',stu.Col2 as 'Name'
FROM Students stu
inner join subjects sub on sub.Col1 = stu.Col3
WHERE stu.Col2 = 'Hari'
UNION ALL 
SELECT sub.Col2 as 'Subject',stu.Col6 as 'Marks',stu.Col2 as 'Name'
FROM Students stu
inner join subjects sub on sub.Col1 = stu.Col5
WHERE stu.Col2 = 'Hari'

http://sqlfiddle.com/#!9/513fe5/17

关于mysql - 如何从单行表中获取多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49684594/

相关文章:

mysql - 强制先更新然后在程序中选择

Mysql统计外键的不同id

php - MySQL 内部连接并将行转换为列

postgresql - 内部 JOIN 无法正常工作

mysql - 来自不同表 mySQL 的多个 SELECT COUNT

同一个表上的 Linq 多重联接

mysql - 将查询结果合并到数组中

由于错误,数据中包含 NULL 的 MySQL XML 导出不会重新导入

MySQL获取成员(member)下线

sql - 如何使用表中的触发器更新特定列和行