2015-06-19 108 views
0

我有目前3个表:加入3个表

  • 表A
  • 表B
  • 表C

有一个& B和B之间的链路之间的链路& C(ABC)。 的事情是:

  • 很可能有一个排在A,但无不是B中
  • 它可能有一排B,而不是在一个
  • 它可能有一排在B,而不是在C

在最后我想有一个查询,其可以给我下面行(其中,X表示对应表的ID):

TableA|TableB|TableC 
    X | X | X 
    X | null | null 
null | X | X 
    X | X | null 

我设法与表A &表B用下面的查询情况:

SELECT A.ID, B.ID 
FROM TABLEA A 
LEFT JOIN TABLEB B on (join condition) 
UNION 
SELECT A.ID,B.ID 
FROM TABLE B 
LEFT JOIN TABLEA A on (join condition) 

感谢您的帮助,您可以提供

回答

0

如果我的理解是正确的那么FULL OUTER JOIN应该做的工作:

SELECT a.id,b.id,c.id 
FROM TableA a 
     FULL OUTER JOIN TableB b on a.id = b.id 
     FULL OUTER JOIN TableC c on COALESCE(a.id,b.id) = c.id 

SQL Fiddle

1

您需要的是FULL OUTER JOIN,但是,您已使用标记了您的帖子 - 这取决于您的意思。 Sybase ASE不支持FULL OUTER JOIN语法,但SQL Anywhere支持。

+0

尼斯信息... :)我没有在Sybase上工作,似乎我不得不修改我的答案。 –