我想知道如何通過編寫外連接查詢來獲得所需的輸出(如下所述) 其中外連接的表是其他連接條件在語句左外連接與相同的表作爲外連接的一部分
給出的以下數據結構,其中 - 表A是含有一些任意對象 主表 - 表B由A引用其中A.TYPE_ID = B.ID - 表C之間defininfs關係表A中的C.SOURCE_ID參考A.ID和C.TARGET_ID參考A.ID
這是怎樣的架構定義,我不能做任何事情(這是一個遺留系統)
TABLE_A
---------------------------
| ID | TYPE_ID | Name |
|-------------------------|
| 1 | 1 | Name 1 |
| 2 | 2 | Name 2 |
| 3 | 1 | Name 3 |
| 4 | 1 | Name 4 |
| 5 | 3 | Name 5 |
|-------------------------|
TABLE_B
----------------------
| ID | TYPE_NAME |
|--------------------|
| 1 | Type 1 |
| 2 | Type 2 |
| 3 | Type 3 |
| 4 | Type 4 |
|--------------------|
TABLE_C
-------------------------------
| PK | SOURCE_ID | TARGET_ID |
|-----------------------------|
| 11 | 2 | 1 |
| 12 | 2 | 3 |
| 13 | 5 | 1 |
| 13 | 5 | 4 |
-------------------------------
我想獲得的「1型」表A中的所有對象是與它們與之相關聯的對象的名稱(否則爲空),它們是類型2, 即外部連接以獲得類型1的所有對象,而不管它們是否具有關聯,但是如果它們這樣做,那麼我需要對象的名稱。 請注意,類型1的對象將始終處於目標中。
對於上面例子中的輸出是
-------------------------------
| Target Name | Source Name |
|-----------------------------|
| Name 1 | Name 2 |
| Name 3 | Name 2 |
| Name 4 | (NULL) |
|-----------------------------|
我原來的連接查詢(不能得到外部聯接工作),這是沒有關聯的正常連接不顯示的對象。
select atrgt.NAME, asrc.NAME
from TABLE_A atrgt
JOIN TABLE_B trgttype on atrgt.TYPE_ID = trgttype.ID
and trgttype.TYPE_NAME = 'Type 1'
JOIN TABLE_C assoc on atrgt.ID = assoc.TARGET_ID
JOIN TABLE_A asrc on asrc.ID = assoc.SOURCE_ID
JOIN TABLE_B srctype on asrc.TYPE_ID = srctype.ID
and srctype.TYPE_NAME = 'Type 2'
您的'正確的'輸出表應該包含名稱1的附加行嗎? – Mikeb 2011-12-20 13:13:47
不,因爲我想要所有的類型1,並且只有它們與類型2相關時才顯示類型2信息。在這種情況下,名稱1與類型2和類型3都關聯,但我對此不感興趣。 – omarello 2011-12-20 13:19:32