[英]SQL query Help with 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 =)
编辑:我已经尝试了FULL OUTER JOIN,但结果是这样的
code value code value
1 10 1 4
2 15 NULL NULL
NULL NULL 3 36
答案!!!:我找到了@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
我猜了一下,因为你的问题没有详细描述所需的输出,但你可能需要的是一个帮助器查询,它将为你创建一个包含所有代码的表(一个UNION
of 2 SELECT
querys)。 然后,可以将此辅助表LEFT JOINED
到2个源表。
编辑:我想到了(FULL)OUTER JOIN自己的答案,但是在阅读之间的界限中,我认为这不是OP真正需要的。 但我当然可能是错的。
使用FULL OUTER JOIN 。
使用完整的外部联接
要通过在连接的结果中包含不匹配的行来保留不匹配的信息,请使用完整的外连接。 SQL Server提供完整的外连接运算符FULL OUTER JOIN,它包括来自两个表的所有行,而不管另一个表是否具有匹配值。
考虑ProductID列上的Product表和SalesOrderDetail表的连接。 结果仅显示具有销售订单的产品。 ISO FULL OUTER JOIN运算符表示无论表中是否存在匹配数据,两个表中的所有行都将包含在结果中。
您可以包含带有完整外部联接的WHERE子句,以仅返回表之间没有匹配数据的行。 以下查询仅返回那些没有匹配销售订单的产品,以及那些与产品不匹配的销售订单(尽管所有销售订单在这种情况下都与产品匹配)。
select
coalesce(t1.cod, t2.cod)
,t1.value99
,t2.value06
from
table1 t1
full outer join table2 t2 on t1.cod= t2.cod
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.