加入3桌

时间:2015-06-19 14:00:55

标签: sql join sybase

我目前有3张桌子:

  • 表A
  • 表B
  • 表C

A& A之间有联系。 B和B& B之间的联系C(A-B-C)。 问题是:

  • 可能在A中有一行但在B
  • 中没有
  • 可以在B中有一行但在A
  • 中没有
  • 可能在B中有一行而在C
  • 中没有

最后我希望有一个查询可以给我以下行(其中X表示相应表的ID):

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

我设法让TableA& TableB带有以下查询:

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)

感谢您提供的任何帮助

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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