答案是否定的。
左连接会从左侧拉出所有结果,并且只会匹配右侧的结果。正确的加入恰恰相反。完整的外连接将从所有结果中提取所有结果,并只加入那些可以加入的结果。
请注意,对于当前数据库,避免完全外连接是明智的,因为它们比其他连接效率低得多。我曾亲自设法击败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