从具有相同结构的两个表中获取重叠数据,为其他表提供优先权:Oracle

时间:2016-11-18 23:18:05

标签: sql oracle

我完全不知道如何解决数据检索的这一挑战。

enter image description here

我在Oracle数据库中有两个表:MY_DATAMY_DATA_CHANGE。 我想选择一些像这样的数据:

SELECT ALL COLUMNS 
FROM MY_DATA 
WHERE ID IN (1,2,4,5) FROM MY_DATA 
    BUT IF ANY ID IS PRESENT IN (1,2,4,5) IN MY_DATA_CHANGE 
    THEN USE ROW FROM MY_DATA_CHANGE

所以我的整体结果必须如下:

enter image description here

我只能使用SQL而不是存储过程,因为这个查询将成为另一个非常大的查询的一部分(遗留代码长期编写)(将在Crystal报表工具中用于创建报表)。

所以请各位帮忙。我的列数据包含CLOB,而通常的UNION逻辑不适用于它们。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

SELECT
    m.Id
    ,COALESCE(c.CLOB1,m.CLOB1) as CLOB1
    ,COALESCE(c.CLOB2,m.CLOB2) as CLOB2
FROM
    MY_DATA m
    LEFT JOIN MY_DATA_CHANGE c
    ON m.Id = c.Id
WHERE 
    m.ID IN (1,2,4,5) 

我选择这样做的方法是通过两个表之间的LEFT JOIN然后使用COALESCE()