首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何合并外部联接和联合结果?

如何合并外部联接和联合结果?
EN

Stack Overflow用户
提问于 2021-09-13 23:07:06
回答 2查看 101关注 0票数 0

我有两张桌子,我想要两个表中的所有数据。如果表具有匹配的AssetID,那么将它们连接到一行中。如果没有,则在单独的行上。完整的外部联接听起来是正确的方法,但我有一个问题,如何选择键,取决于它来自哪个表。

代码语言:javascript
运行
复制
TABLE A                 TABLE B
AssetID | Valuable      AssetID | Protected 
-------------------    -------------------
123     | Yes           123     | Yes   
456     | No            321     | No
653     | Yes   

目标:

代码语言:javascript
运行
复制
TABLE C     
AssetID | Valuable | Protected
---------------------------
123 | Yes   |Yes
456 | No    |
653 | Yes   |
321 |       |No


SELECT TableA.AssetID, TableA.Valuable, TableB.Protected
FROM (
    SELECT AssetID, Valuable
    FROM TableA
) ta    
FULL OUTER JOIN (
    SELECT AssetID, Protected
    FROM TableB   
) tb ON ta.AssetID=tb.AssetID

表C

代码语言:javascript
运行
复制
AssetID | Valuable | Protected
---------------------------
123     | Yes      |Yes
456     | No       |
653     | Yes      |
        |          |No              <<<< PROBLEM
---------------------------

我错过了钥匙

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-13 23:10:33

您可以使用coalesce从任何表中获取非空assetID

代码语言:javascript
运行
复制
SELECT COALESCE(TableA.AssetID, TableB.AssetID) TableA.Valuable, TableB.Protected
FROM
(
SELECT 
    AssetID,
    Valuable
FROM 
    TableA
) ta

FULL OUTER JOIN 

(SELECT 
    AssetID,
    Protected
FROM 
    TableB

) tb

ON ta.AssetID=tb.AssetID

注意:不过,您可能不需要子查询,省略它们可以大大简化查询:

代码语言:javascript
运行
复制
SELECT COALESCE(TableA.AssetID, TableB.AssetID) TableA.Valuable, TableB.Protected
FROM TableA
FULL OUTER JOIN TableB
ON TableA.AssetID=TableB.AssetID
票数 5
EN

Stack Overflow用户

发布于 2021-09-14 12:08:16

为了处理Null值,我们使用了合并函数。或者,代替完全连接,我们可以使用左连接,然后右连接。

代码语言:javascript
运行
复制
SELECT COALESCE(TABLEA.AssetID,TABLEB.AssetId) AS 
AssetId,TABLEA.Valuable,TABLEB.Protected
FROM TABLEA 
LEFT JOIN 
TABLEB ON TABLEA.AssetID = TABLEB.AssetID
UNION
SELECT COALESCE(TABLEA.AssetID,T1.AssetID) AS 
AssetID,TABLEA.Valuable,T1.Protected FROM TABLEA
RIGHT JOIN 
TABLEB T1 ON TABLEA.AssetID=T1.AssetID
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69169987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档