将 2 个查询的结果混合在一个 table 中?
mix the result of 2 queries in one table?
我是 SQL 的新手,我可以将具有不同属性的两个查询的结果混合在一个 table 中吗?
低于我的数据库的 3 table 和我想要得到的结果。这可能吗?
客户
|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|
已编辑 用于访问。
对 2 个子查询使用 UNION
:
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
我是 SQL 的新手,我可以将具有不同属性的两个查询的结果混合在一个 table 中吗?
低于我的数据库的 3 table 和我想要得到的结果。这可能吗?
客户
|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|
已编辑 用于访问。
对 2 个子查询使用 UNION
:
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