1

我已经为此苦苦挣扎了一段时间,我有两个不同的表共享一列,但都有不同的行数。一张表用于付款请求(表 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 相关的费用 ID 的空值与左外连接,但它没有显示列 requestid 的空值,关于如何执行此操作的任何想法?

4

1 回答 1

2

你需要 aFULL OUTER JOIN而不是 a 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

于 2012-08-05T23:34:03.223 回答