我需要更新数据库表中的一些行。如何识别要更新的行涉及一系列复杂的语句,我设法将它们归结为一系列WITH语句。现在我有了正确的数据值,我需要更新表。
由于我设法使用WITH语句获取这些值,因此我希望在更新/合并中使用它。一个简化的示例如下:
with data1
(
ID_1
)
as
(
Select ID
from ID_TABLE
where ID > 10
)
,
cmedb.data2
(
MIN_ORIGINAL_ID
,OTHER_ID
)
as
(
Select min(ORIGINAL_ID)
,OTHER_ID
from OTHER_ID_TABLE
where OTHER_ID in
(
Select distinct ID_1
From data1
)
group by OTHER_ID
)
select MIN_ORIGINAL_ID
,OTHER_ID
from cmedb.data2
现在我有两列数据,我想用它们来更新表。因此,我没有将选择放在底部,而是尝试了各种合并和更新的组合,包括将WITH语句放在UPDATE/MERGE之上,或者作为UPDATE/MERGE语句的一部分。以下是我心中最接近我想做的事情:
merge into ID_TABLE as it
using
(
select MIN_ORIGINAL_ID
,OTHER_ID
from cmedb.data2
) AS SEL
ON
(
it.ID = sel.OTHER_ID
)
when matched then
update
set it.ORIGINAL_ID = sel.MIN_ORIGINAL_ID
所以这是行不通的。我不确定这是否可能,因为我在互联网上没有找到使用WITH语句与UPDATE或MERGE结合使用的示例。我有WITH语句与INSERT结合使用的例子,所以相信这是可能的。
如果有人可以提供帮助,那就太好了,如果我遗漏了任何对解决问题有用的信息,请告诉我。
免责声明:我提供的示例是我想要做的事情的简化版本,实际上可能没有任何意义!