SQL将两个表与一个相同的列组合在一起,而不会丢失另一个列的值

时间:2012-08-05 23:29:56

标签: sql

我一直在努力解决这个问题,我有两个不同的表共享一个列,但两个行的行数不同。 其中一个表是货币请求(表1),另一个是证明费用(表2)

表1

+-----------+-----------+
|expenseid  | requestid |
+-----------+-----------+
| 16333     | 7454      |
| NULL      | 7455      |
| 16336     | 7456      |
| 16338     | 7457      |
| NULL      | 7458      |
| 16341     | 7459      |
| 16345     | 7460      |
| NULL      | 7461      |
| NULL      | 7462      |
+-----------+-----------+

表2

+-----------+-----------+
|expenseid  | amount    |
+-----------+-----------+
| 16333     | 200       |
| 16334     | 150       |
| 16335     | 300       |
| 16336     | 900       |
| 16337     | 100       |
| 16338     | 120       |
| 16339     | 700       |
| 16340     | 431       |
| 16341     | 420       |
| 16342     | 150       |
| 16343     | 240       |
| 16344     | 465       |
| 16345     | 200       |
| 16346     | 120       |
| 16347     | 90        |
| 16348     | 50        |
| 16349     | 245       |
+-----------+-----------+

正如您所看到的,这些表共享相同的列'expenseid',但行数不同,并且有两个不同的列彼此不对应,我想有一个表如下

组合表

+-----------+-----------+-----------+
|expenseid  | amount    | requestid | 
+-----------+-----------+-----------+
| 16333     | 200       | 7454      |
| NULL      | NULL      | 7455      |
| 16334     | 150       | NULL      |
| 16335     | 300       | NULL      |
| 16336     | 900       | 7456      |
| 16337     | 100       | NULL      |
| 16338     | 120       | 7457      |
| NULL      | NULL      | 7458      |
| 16339     | 700       | NULL      |
| 16340     | 431       | NULL      |
| 16341     | 420       | 7459      |
| 16342     | 150       | NULL      |
| 16343     | 240       | NULL      |
| 16344     | 465       | NULL      |
| 16345     | 200       | 7460      |
| NULL      | NULL      | 7461      |
| NULL      | NULL      | 7462      |
| 16346     | 120       | NULL      |
| 16347     | 90        | NULL      |
| 16348     | 50        | NULL      |
| 16349     | 245       | NULL      |
+-----------+-----------+-----------+

我设法以一种方式合并两个表,它显示与表1相关的使用左外连接的expenseid的空值,但是它没有显示请求列的空值,关于如何的任何想法做这个?

1 个答案:

答案 0 :(得分:2)

您需要FULL OUTER JOIN而不是LEFT OUTER JOIN

SELECT
    COALESCE(Table1.expenseid, Table2.expenseid) AS expenseid,
    amount,
    requestid
FROM Table1
FULL OUTER JOIN Table2
ON Table1.expenseid = Table2.expenseid

结果:

EXPENSEID   AMOUNT  REQUESTID
16333       200     7454
(null)      (null)  7455
16336       900     7456
16338       120     7457
...etc...

查看在线工作:sqlfiddle

相关问题