1

我有两张这样的桌子。

表格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 |

问题是并非所有代码都存在于两个表中,所以如果代码不存在于其中一个表中,它的值应该为空。最后我想要这样的东西

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

我认为使用 LEFT 或 RIGHT JOIN 是不可能的……或者它可能是……有什么想法吗?谢谢=)

已编辑:我尝试了 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
4

3 回答 3

2

我猜了一下,因为您的问题没有详细描述所需的输出,但您可能需要的是一个帮助查询,它将为您创建一个包含所有代码的表(UNION2 个查询中的一个SELECT)。然后,此帮助表可以LEFT JOINED用于您的 2 个源表)。

编辑:我自己想到了(FULL)OUTER JOIN 答案,但在字里行间阅读时,我认为这不是 OP 真正需要的。但我当然可能是错的。

于 2010-08-10T09:42:18.763 回答
1
select 
    coalesce(t1.cod, t2.cod)
    ,t1.value99
    ,t2.value06
from 
    table1 t1 
    full outer join table2 t2 on t1.cod= t2.cod
于 2010-08-10T10:08:44.597 回答
1

使用FULL OUTER JOIN

使用完全外连接

要通过在连接结果中包含不匹配行来保留不匹配信息,请使用完全外连接。SQL Server 提供完全外连接运算符FULL OUTER JOIN,它包括两个表中的所有行,而不管另一个表是否具有匹配值。

考虑在 ProductID 列上连接 Product 表和 SalesOrderDetail 表。结果仅显示具有销售订单的产品。ISO FULL OUTER JOIN 运算符表示两个表中的所有行都将包含在结果中,而不管表中是否存在匹配的数据。

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

于 2010-08-10T09:39:16.947 回答