Oracle:尝试使用唯一键组合的“更新”语句。卡在 where 子句中

Posted

技术标签:

【中文标题】Oracle:尝试使用唯一键组合的“更新”语句。卡在 where 子句中【英文标题】:Oracle: Trying 'Update' statement using combination of unique Keys. Stuck in the where clause 【发布时间】:2020-01-21 17:23:05 【问题描述】:

我正在尝试使用使用唯一键组合的更新语句。这些唯一键用于使用子查询从选择查询中拖出的 where 子句。不知道如何将这两者结合使用。

查询看起来像这样

1    UPDATE table1
2    SET column1 = .. , column2 = ..
3    WHERE TOOL_NO, TOOL_SERIAL_NO IN
4    (SELECT TOOL_NO, TOOL_SERIAL_NO FROM TABLE2 WHERE condition)

TOOL_NO 和 TOOL_SERIAL_NO 是唯一键并且相互依赖。 例如 Tool_No 将有多个 Tool_Serial_No。

问题出在第 3 行。不确定如何在依赖于同一个子查询的同一个 where 子句中使用两个字段,

感谢任何帮助。

【问题讨论】:

【参考方案1】:

您已经很接近了 - 只需将第 3 行中的这些列括在括号中即可:

UPDATE table1
   SET column1 = .. , column2 = ..
   WHERE (TOOL_NO, TOOL_SERIAL_NO) IN
     (SELECT TOOL_NO, TOOL_SERIAL_NO FROM TABLE2 WHERE condition)

【讨论】:

【参考方案2】:

您还需要将针对 table2 的子查询与 table1 SQL 中的外部 where 相关联。

【讨论】:

【参考方案3】:

在将 where 子句中的多个列匹配在一起时,始终将其括在括号中。所以在你的情况下 WHERE TOOL_NO, TOOL_SERIAL_NO 应该是 WHERE (TOOL_NO, TOOL_SERIAL_NO)

 UPDATE table1
    SET column1 = .. , column2 = ..
    WHERE (TOOL_NO, TOOL_SERIAL_NO) IN
    (SELECT TOOL_NO, TOOL_SERIAL_NO FROM TABLE2 WHERE condition)

【讨论】:

以上是关于Oracle:尝试使用唯一键组合的“更新”语句。卡在 where 子句中的主要内容,如果未能解决你的问题,请参考以下文章

在组合框中使用向下/向上箭头键选择数据而不更新数据,直到点击选项卡或输入 MS Access

如何为 Oracle 中的列组合赋予唯一约束?

ORACLE ADF:EO 主键唯一,候选键唯一

(Oracle SQL) 如何在插入后使用唯一键更新表?

Oracle - 更新连接 - 非键保留表

Oracle - 更新连接 - 非键保留表