我完全不知道如何解决数据检索的这一挑战。
我在Oracle数据库中有两个表:MY_DATA
和MY_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
所以我的整体结果必须如下:
我只能使用SQL而不是存储过程,因为这个查询将成为另一个非常大的查询的一部分(遗留代码长期编写)(将在Crystal报表工具中用于创建报表)。
所以请各位帮忙。我的列数据包含CLOB,而通常的UNION逻辑不适用于它们。
我该怎么做?
答案 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()
。