2014-11-04 65 views
0

是否有可能有一個左連接,這將使如以下假設結果:複雜(我的)SQL左連接

表A:

id value 
1 foo 
2 bar 
3 foobar 

表B:

foreign foreign_value 
1   fish 
1   soup 

加入的結果應該是表A(左連接)的每個結果以及A和B之間的連接結果:

SELECT * FROM甲複雜加入乙ON A.id = B.foreign:

id value foreign foreign_value 
1 foo  NULL  NULL 
1 foo  1   fish 
1 foo  1   soup 
2 bar  NULL  NULL 
3 foobar NULL  NULL 

當執行正常LEFT JOIN所示的例子中,結果集的第一行就不會存在。

這樣的選擇可能嗎?

+0

你的意思是'outer join'。 – Sebas 2014-11-04 18:16:58

+1

我不確定你想要達到的目標。這根本不是聯接,因爲它包含了其他地方不存在的值。 (例如,在id = 1的情況下,爲null的值爲外部值/值)。瞭解更多關於它會有所幫助。 – Sebas 2014-11-04 18:22:01

+0

整個故事可能是由於添加了一個附加功能而導致的數據庫/表格設計不佳。在CMS中,我們顯示分配了某個頁面的「新聞」記錄(簡單的int域「pid」)。新功能允許新聞顯示在多個頁面上。爲此,我添加了一個包含新聞<-->頁面關係的M-M表。現在我必須將舊的「pid」類型查詢與新的MM查詢結合起來,整個事情歸結爲這個問題。 – kraftb 2014-11-07 16:12:48

回答

1

不,這樣的連接是不可能的,因爲你不會得到第一行。

你可以使用一個像工會

SELECT a.id, a.value, b.foreign, b.foreign_value 
FROM A inner join B ON A.id=B.foreign 
    UNION 
SELECT a.id, a.value, null, null 
FROM A 

這將使預期的結果在你的榜樣,但我不明白爲什麼你嘗試這樣做。因此,我不知道這是否會給出一般情況下的預期結果。