我有两张这样的桌子。
Table1
Column | Type |
---------+------------------+
cod | text |
value99 | double precision |Table2
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=)
编辑:我已经尝试了完整的外部连接,但结果类似于
code value code value
1 10 1 4
2 15 NULL NULL
NULL NULL 3 36答案!:我找到了@Tobiasopdenbrouw的答案thx:
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发布于 2010-08-10 17:42:19
我猜有点,因为您的问题没有详细描述所需的输出,但您可能需要一个助手查询,它将为您创建一个包含所有代码的表(一个包含2个SELECT查询的UNION )。然后,该帮助器表可以LEFT JOINED到您的2个源表)。
编辑:我自己想到了(完整的)外连接答案,但在字里行间的理解中,我认为这不是OP真正需要的。当然,我也可能是错的。
发布于 2010-08-10 17:39:17
使用FULL OUTER JOIN。
使用完全外连接的
若要通过在联接结果中包含非匹配行来保留非匹配信息,请使用完全外联接。SQL Server提供full outer join运算符FULL OUTER JOIN,它包括两个表中的所有行,而不管另一个表是否具有匹配值。
考虑Product表和SalesOrderDetail表在其ProductID列上的联接。结果仅显示其上有销售订单的产品。ISO FULL OUTER JOIN运算符指示两个表中的所有行都将包含在结果中,而不管表中是否有匹配的数据。
可以将WHERE子句与完整的外部联接一起包含,以便只返回表之间没有匹配数据的行。以下查询只返回那些没有匹配销售订单的产品,以及那些与产品不匹配的销售订单(尽管在本例中,所有销售订单都与产品匹配)。
发布于 2010-08-10 18:08:45
select
coalesce(t1.cod, t2.cod)
,t1.value99
,t2.value06
from
table1 t1
full outer join table2 t2 on t1.cod= t2.codhttps://stackoverflow.com/questions/3447654
复制相似问题