2016-05-30 8 views
0

を選択し、私は私は良い自分自身を説明することを願って、私は1対多の接続(テーブルAとテーブルB)との2つのテーブルを持っています。ここで、TableBにはTableAという外部キー形式の列と3番目のTableCのID(外部キー)の列があります。今通常2〜3行はTableAのと同じFKを共有し、これが私の考えられるシナリオです:他のヌルが存在する場合はnull以外の値を選択しますが、常に行

  1. 同じFK_TableAを持つすべての行を同じFK_TableAを持つすべての行がFK_TableC
  2. ためのNULL持って同じFK_TableC

  3. を持っています

    TableB 
    ---------------------------- 
    |ID| FK_TableA | FK_TableC | 
    ---------------------------- 
    |1 | 123 | 321 | 
    |2 | 123 | 321 | 
    |3 | 123 | NULL | 
    ---------------------------- 
    

だから2行が同じFK_TableAとの差分を持つことはできません。同じFK_TableAを持つすべての行がいずれかNULLまたは同じFK_TableCそうのように持っていますFK_TableCと同じか、それとも同じであるかは、別のものがnullかすべてnullです。

今私の質問は、FK_TableAに基づいてFK_TableAを区別して選択する方法です。FK_TableAを持つ行に値(nullでない)がある場合、その値をnullにしてTableAに結果を結合しますか?しかし、私は常にどちらか失うか、複列WHERE - 私が加入してからしようとしている

。だから私はそうのように選択する必要があります上記の表から:

TmpTable 
------------------------- 
| FK_TableA | FK_TableC | 
------------------------- 
| 123 | 321 | => From Above 
| 124 | NULL | => If all FK_TableC ware null 
| 125 | 325 | => If at least one or all FK_TableC ware 325 
------------------------- 

は、事前にありがとうございます。

+0

このように、この3つの行をすべて取得することを期待しています。 – sagi

+0

まだ存在していればヌル値ではありませんが、今回はあまりにも速い質問を投稿したと思いますが、MAXとGROUP BY –

+0

を使って答えを見つけたと思います。今質問を削除することができると思います。 – sagi

答えて

0

私はこの質問Easiest way to eliminate NULLs in SELECT DISTINCT?の答えのおかげで私の答えを見つけましたが、私はそれを聞いて急いではいけませんでした。私のクエリは次のようになります:

SELECT A.ID, A.NAME, C.ID_D FROM TABLE TableA A 
LEFT JOIN (SELECT DISTINCT FK_TableA, MAX(FK_TableC) AS ID_C FROM TableB 
GROUP BY (FK_TableA)) B ON B.FK_TableA = A.ID 
LEFT JOIN TableC C ON C.ID = B.ID_C 
関連する問題