日期:2014-05-17  浏览次数:20704 次

初学者问多表外连接问题
假设说三个表外连接

select * from A left join B on A.x=b.x  left join C on...........

A和B外连接我懂   再挂C表的时候   是A和B的虚拟合表 挂C  还是B表在挂C(因为C是写在B的后面的) 

on链接条件怎么写 
写成A.xx=C.xx 就是A C外连?  
写成B.xx=C.xx 就是B C外连?  

有些糊涂呢 

------解决方案--------------------

--写成A.xx=C.xx 就是A C外连,沒錯! 
--写成B.xx=C.xx 應該是A及B同時與C外连

--也許用下面的測試結果你會更清楚:
CREATE TABLE #t1 (a1 CHAR(1))
INSERT #t1 SELECT 'A'
INSERT #t1 SELECT 'B'

CREATE TABLE #t2 (a1 CHAR(1))
INSERT #t2 SELECT 'A' UNION ALL SELECT 'C'

CREATE TABLE #t3 (a1 CHAR(1))
INSERT #t3 SELECT 'A' UNION ALL SELECT 'B' UNION ALL SELECT 'C'

SELECT a.a1 a_a1,b.a1 b_a1,c.a1 c_a1
FROM #t1 a
LEFT JOIN #t2 b ON a.a1=b.a1
LEFT JOIN #t3 c ON a.a1=c.a1

SELECT a.a1 a_a1,b.a1 b_a1,c.a1 c_a1
FROM #t1 a
LEFT JOIN #t2 b ON a.a1=b.a1
LEFT JOIN #t3 c ON b.a1=c.a1