什么 ORACLE 更新 SQL 查询呢?
Posted
技术标签:
【中文标题】什么 ORACLE 更新 SQL 查询呢?【英文标题】:What ORACLE Update SQL Query for this? 【发布时间】:2018-11-19 04:13:52 【问题描述】:我想将RENEWED_PERMIT_TEMP
的值更新为T2_VAL
。
想到merge into
,但我不习惯ORACLE DB
。
Data from that query
【问题讨论】:
【参考方案1】:我们可以尝试使用相关子查询:
UPDATE LCS_GEN_COPY t1
SET RENEWED_PERMIT_TEMP = (SELECT DISTINCT t2.USER_REFERENCE_NUMBER
FROM LCS_GEN_COPY t2
WHERE t2.PREV_CERTIFICATE_PERMIT_NUMBER =
t1.APPROVAL_REFERENCE AND t1.RENEWED_PERMIT_TEMP =
t1.USER_REFERENCE_NUMBER);
【讨论】:
[21000][1427] ORA-01427:单行子查询返回多于一行。我上面的选择语句获取了我需要更新的所有值 那么你的要求是没有意义的。在子查询中尝试SELECT DISTINCT
。如果这不起作用,那么您需要为我们提供从许多可能的更新值中进行选择的逻辑。
因为我上面的查询是我必须交换值的所有数据。是否可以从该选择查询中更新数据?
您的评论毫无意义。问题是您的查询有时有多个 USER_REFERENCE_NUMBER
可以从中更新一个 RENEWED_PERMIT_TEMP
值。【参考方案2】:
你可以试试下面
UPDATE
(SELECT t1.INSTANCE_ID
,t1.RENEWED_PERMIT_TEMP
,t1.USER_REFERENCE_NUMBER AS t1_val
,t2.USER_REFERENCE_NUMBER AS t2_val
,t2.PREV_CERTIFICATE_PERMIT_NUMBER
,t1.APPROVAL_REFERENCE
FROM LCS_GEN_COPY AS t1
INNER JOIN LCS_GEN_COPY AS t2 ON t2.PREV_CERTIFICATE_PERMIT_NUMBER = t1.APPROVAL_REFERENCE
AND t1.RENEWED_PERMIT_TEMP = t1.USER_REFERENCE_NUMBER
) t
SET t.RENEWED_PERMIT_TEMP = t.t2_val
【讨论】:
以上是关于什么 ORACLE 更新 SQL 查询呢?的主要内容,如果未能解决你的问题,请参考以下文章