SQL查询帮助OUTER JOIN?

时间:2010-08-10 09:38:03

标签: sql outer-join

我有两张这样的桌子。

表1

Column   |       Type       |
---------+------------------+
 cod     | text             |
 value99 | double precision |

表2

Column   |       Type       |
---------+------------------+
 cod     | text             |
 value06 | double precision |

我想和他们一起加入,所以我会有像

这样的东西
Column   |       Type       |
---------+------------------+
 cod     | text             |
 value99 | double precision |
 value06 | double precision |

问题是并非所有代码都存在于两个表中,因此如果其中一个表中没有代码,则其值应为null。最后我想要这样的

cod      |      value99     |      value06     |
---------+------------------+------------------+
 1       |     10           |       20         |
 2       |     13           |      NULL        |
 3       |     NULL         |        15        |

我认为不可能使用LEFT或RIGHT JOIN ..或者它可能是......任何想法? THX =)

EDITED: 我尝试了FULL OUTER JOIN但结果类似于

code    value  code    value
1       10     1    4
2    15     NULL    NULL
NULL NULL 3 36

ANSWER !!!: 我找到了@Tobiasopdenbrouw的答案:

SELECT test1.code,test1.value,test2.value FROM public.test1 LEFT OUTER JOIN public.test2 ON test1.code=test2.code
UNION
SELECT test2.code,test1.value,test2.value FROM public.test1 RIGHT OUTER JOIN public.test2 ON test1.code=test2.code

3 个答案:

答案 0 :(得分:2)

我猜了一下,因为你的问题没有详细描述所需的输出,但你可能需要的是一个帮助器查询,它将创建一个包含所有代码的表({{1} 2个UNION个查询)。然后,此帮助程序表可以{2}到您的2个源表。

编辑:我自己想到了(全部)外部联接答案,但是在阅读这些内容之间,我认为这不是OP真正需要的。但当然,我错了。

答案 1 :(得分:1)

使用FULL OUTER JOIN

  

使用完整外部联接

     

保留   包含的不匹配信息   结果中不匹配的行   加入,使用完整的外连接。 SQL   服务器提供完整的外部联接   操作员,FULL OUTER JOIN,其中   包括两个表中的所有行,   不管对方是否   table具有匹配值。

     

考虑Product表的连接   和SalesOrderDetail表   他们的ProductID列。结果   仅显示具有销售额的产品   他们的订单。 ISO FULL OUTER   JOIN运算符表示所有行   从两个表中都包括在内   结果,无论是否   表格中有匹配的数据。

     

您可以包含带有的WHERE子句   完全外连接只返回   没有匹配数据的行   表之间。下列   查询只返回那些产品   没有匹配的销售订单   作为那些没有的销售订单   与产品相匹配(尽管全部   在这种情况下,销售订单是   与产品相匹配)。

答案 2 :(得分:1)

select 
    coalesce(t1.cod, t2.cod)
    ,t1.value99
    ,t2.value06
from 
    table1 t1 
    full outer join table2 t2 on t1.cod= t2.cod