首页 > 解决方案 > 在一张表中混合 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|

标签: sqlmergems-access-2007

解决方案


为访问而编辑。
用于UNION2 个子查询:

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

推荐阅读