sql - 如何将多个表与不同的列组合起来
问题描述
我有 3 张桌子。我希望school
表格设置数据major_subject
并获得minor_subject
结果。
由于该表没有列,因此也自动设置units 3.0
为。major_subject
我尝试使用UNION
但出现错误,因为major_subject
列与minor_subject
表不同。
school major_subject
| school_id | school_name | | subj_name | date_offered |
----------------------------- ---------------------------------
| 1 | schoolA | | Business101 | 2021/01/01 |
| 2 | schoolB | | Marketing101 | 2021/01/01 |
| 3 | schoolC |
minor_subject
| school_id | subj_name | units | date_offered |
----------------------------------------------------
| 1 | Math | 1.0 | 2021/01/01 |
| 1 | English | 1.0 | 2021/01/01 |
| 1 | Science | 1.0 | 2021/01/01 |
| 2 | History | 2.0 | 2021/01/01 |
结果表如下:
| school_id | subj_name | units | date_offered |
---------------------------------------------------------
| 1 | Business101 | 3.0 | 2021/01/01 |
| 1 | Marketing101 | 3.0 | 2021/01/01 |
| 1 | Math | 1.0 | 2021/01/01 |
| 1 | English | 1.0 | 2021/01/01 |
| 1 | Science | 1.0 | 2021/01/01 |
| 2 | Business101 | 3.0 | 2021/01/01 |
| 2 | Marketing101 | 3.0 | 2021/01/01 |
| 2 | History | 2.0 | 2021/01/01 |
| 3 | Business101 | 3.0 | 2021/01/01 |
| 3 | Marketing101 | 3.0 | 2021/01/01 |
解决方案
您可以CROSS
加入school
以major_subject
获取 2 个表的行的所有组合,然后UNION ALL
从以下位置添加行minor_subject
:
SELECT s.school_id, m.subj_name, 3.0 units, m.date_offered
FROM school s CROSS JOIN major_subject m
UNION ALL
SELECT school_id, subj_name, units, date_offered
FROM minor_subject
ORDER BY school_id
请参阅演示。
结果:
> school_id | subj_name | units | date_offered
> --------: | :----------- | ----: | :-----------
> 1 | Business101 | 3.0 | 2021-01-01
> 1 | Marketing101 | 3.0 | 2021-01-01
> 1 | Math | 1.0 | 2021-01-01
> 1 | English | 1.0 | 2021-01-01
> 1 | Science | 1.0 | 2021-01-01
> 2 | History | 2.0 | 2021-01-01
> 2 | Marketing101 | 3.0 | 2021-01-01
> 2 | Business101 | 3.0 | 2021-01-01
> 3 | Business101 | 3.0 | 2021-01-01
> 3 | Marketing101 | 3.0 | 2021-01-01
推荐阅读
- html - 如果我在 Typescript 文件中有一个布尔值,我如何在相应的 HTML 文件中访问它?
- mysql - 具有一对多外键的实体关系
- android - 使用 Retrofit2 Android 的快速 API 错误代码 500
- sql - 在 SQL 中,为变量的所有选项创建包含迄今为止小计的年度汇总表
- excel - 提高后台日志例程的效率
- android - 是否有一个小部件可以做到这一点,或者我将如何构建这种行为
- java - Android sdk 未安装
- oracle - 使用 groupby 和 where 子句在提交时快速刷新
- javascript - 在我的 Nodejs 项目中编辑产品时出现问题
- c - 如何在c中的同一行上打印两个字符串