sql - 在一张表中混合 2 个查询的结果?
问题描述
我是 SQL 新手,我可以将两个查询的结果混合在一个具有不同属性的表中吗?
下面是我的数据库的 3 个表和我想要得到的结果。这可能吗 ?
客户
|id|name|adress|
----------------
|1 |a |x |
|2 |b |y |
命令
|id|client.id|product|date |
--------------------------------
|1 |1 |px |2018-01-1|
|2 |1 |py |2018-05-1|
|3 |2 |px |2018-06-1|
支付
|id|client.id|amount|date |
-------------------------------
|1 |1 |1000 |2018-03-1|
|2 |2 |500 |2018-09-1|
输出
|name |order.id |product |pay.id |amount |date |
----------------------------------------------------
|a |1 |px |- |- |2018-01-1|
|a |- |- |1 |1000 |2018-03-1|
|a |2 |py |- |- |2018-05-1|
|b |3 |px |- |- |2018-06-1|
|b |- |- |2 |500 |2018-09-1|
解决方案
为访问而编辑。
用于UNION
2 个子查询:
SELECT * FROM (
SELECT client.name, order.id AS orderid, order.product AS product,
"-" AS payid, "-" AS amount, order.date AS [date]
FROM client INNER JOIN [order] ON client.id = order.clientid
UNION
SELECT client.name, "-" AS orderid, "-" AS product,
pay.id AS payid, pay.amount AS amount, pay.date AS [date]
FROM client INNER JOIN [pay] ON client.id = pay.clientid
)
ORDER BY name, date
结果是:
name orderid product payid amount date
a 1 px - - 2018-01-1
a - - 1 1000 2018-03-1
a 2 py - - 2018-05-1
b 3 px - - 2018-06-1
b - - 2 500 2018-09-1
推荐阅读
- c - 使用 winmm 在 Win32 中播放 MP3 文件
- google-sheets - 有没有办法将 MAX() 与自动多个范围值一起使用?
- javascript - TypeError:验证不是 react.js 中的函数
- javascript - 检查是否提供了所有属性或全部没有
- javascript - Wavesurfer-js 隐藏了 Typescript 波
- android - 为什么我的应用程序在 Android Studio (Kotlin Multiplatform) 上模拟时由于 Null ImageView 而崩溃?
- machine-learning - sklearn.model_selection.TimeSeriesSplit 中的差距参数
- java - Mockito 对象映射器测试
- javascript - 我不能在我的 html 脚本中使用 require,谁能回答为什么?
- eslint - Eslint 无法加载在 '.eslintrc' 中声明的插件 'security':找不到模块 'eslint-plugin-security'