繁体   English   中英

SQL查询帮助OUTER JOIN?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM