1

列を共有する2つの異なるテーブルがありますが、両方とも行の量が異なります。表の 1 つは金銭請求用 (表 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」を共有していますが、行の量が異なり、互いに対応していない2つの異なる列があります。次のようなテーブルが必要です

複合テーブル

+-----------+-----------+-----------+
|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 の null 値を表示する方法で両方のテーブルをマージすることができましたが、列 requestid の null 値は表示されません。これを行う方法についてのアイデアはありますか?

4

1 に答える 1

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

于 2012-08-05T23:34:03.223 に答える