我一直在努力解决这个问题,我有两个不同的表共享一个列,但两个行的行数不同。 其中一个表是货币请求(表1),另一个是证明费用(表2)
+-----------+-----------+
|expenseid | requestid |
+-----------+-----------+
| 16333 | 7454 |
| NULL | 7455 |
| 16336 | 7456 |
| 16338 | 7457 |
| NULL | 7458 |
| 16341 | 7459 |
| 16345 | 7460 |
| NULL | 7461 |
| NULL | 7462 |
+-----------+-----------+
+-----------+-----------+
|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的空值,但是它没有显示请求列的空值,关于如何的任何想法做这个?
答案 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