1

このようなテーブルが2つあります。

表1

Column   |       Type       |
---------+------------------+
 cod     | text             |
 value99 | double precision |

表2

Column   |       Type       |
---------+------------------+
 cod     | text             |
 value06 | double precision |

そして、私は彼らに参加したいので、私は次のようなものを持っているでしょう

Column   |       Type       |
---------+------------------+
 cod     | text             |
 value99 | double precision |
 value06 | double precision |

問題は、すべてのコードが両方のテーブルに存在するわけではないため、コードがいずれかのテーブルに存在しない場合、その値はnullになるはずです。

cod      |      value99     |      value06     |
---------+------------------+------------------+
 1       |     10           |       20         |
 2       |     13           |      NULL        |
 3       |     NULL         |        15        |

LEFTやRIGHTJOINでは不可能だと思います。それとも…何かアイデアはありますか?Thx =)

編集済み:FULL OUTER JOINを試しましたが、結果は次のようになります。

code    value  code    value
1       10     1    4
2    15     NULL    NULL
NULL NULL 3 36

答え!!!:@ Tobiasopdenbrouwへの答えthxを見つけました:

SELECT test1.code,test1.value,test2.value FROM public.test1 LEFT OUTER JOIN public.test2 ON test1.code=test2.code
UNION
SELECT test2.code,test1.value,test2.value FROM public.test1 RIGHT OUTER JOIN public.test2 ON test1.code=test2.code
4

3 に答える 3

2

あなたの質問は必要な出力を詳細に説明していないので、少し推測していますが、おそらく必要なのは、すべてのコード(UNION2つのクエリのうちの1つ)を含むテーブルを作成するヘルパークエリですSELECT。このヘルパーテーブルはLEFT JOINED、2つのソーステーブルに配置できます)。

編集:(完全な)OUTER JOINの答えを自分で考えましたが、行間を読んでいると、それがOPが本当に必要としていることではないと思います。もちろん、私は間違っている可能性があります。

于 2010-08-10T09:42:18.763 に答える
1

FULLOUTERJOINを使用します。

完全外部結合の使用

結合の結果に一致しない行を含めることによって一致しない情報を保持するには、完全外部結合を使用します。SQL Serverは、完全外部結合演算子FULL OUTER JOINを提供します。これには、他のテーブルの値が一致するかどうかに関係なく、両方のテーブルのすべての行が含まれます。

ProductID列でのProductテーブルとSalesOrderDetailテーブルの結合について考えてみます。結果には、販売注文がある製品のみが表示されます。ISO FULL OUTER JOIN演算子は、テーブルに一致するデータがあるかどうかに関係なく、両方のテーブルのすべての行が結果に含まれることを示します。

テーブル間に一致するデータがない行のみを返すために、完全外部結合を含むWHERE句を含めることができます。次のクエリは、一致する販売注文がない製品と、製品と一致しない販売注文のみを返します(ただし、この場合、すべての販売注文は製品と一致します)。

于 2010-08-10T09:39:16.947 に答える
1
select 
    coalesce(t1.cod, t2.cod)
    ,t1.value99
    ,t2.value06
from 
    table1 t1 
    full outer join table2 t2 on t1.cod= t2.cod
于 2010-08-10T10:08:44.597 に答える