答案是否定的。
左連接會從左側拉出所有結果,並且只會匹配右側的結果。正確的加入恰恰相反。完整的外連接將從所有結果中提取所有結果,並只加入那些可以加入的結果。
請注意,對於當前數據庫,避免完全外連接是明智的,因爲它們比其他連接效率低得多。我曾親自設法擊敗Oracle和PostgreSQL全連接數量級的,像這樣的招數,也可用於模擬完全外部的數據庫連接沒有他們:
SELECT some_id
, MAX(foo) AS foo
, MAX(bar) AS bar
, MAX(baz) AS baz
, MAX(blat) AS blat
FROM (
SELECT A.some_id
, A.foo
, A.bar
, NULL as baz
, NULL as blat
FROM A
UNION ALL
SELECT B.some_id
, NULL as foo
, NULL as bar
, B.baz
, B.blat
FROM B
) AS subquery
GROUP BY some_id;
有該查詢可能無法正常工作,因爲數據庫不會計算出空列的類型。有解決方法。最簡單的方法是創建一個具有顯式列類型的臨時表,使用2個插入查詢模擬UNION ALL,然後從臨時表中查詢。
(爲我的格式樣式的說明,請參見http://bentilly.blogspot.com/2011/02/sql-formatting-style.html。)
我已更新我的答案以回答您更新的問題。 – btilly 2011-02-16 15:32:49