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 子句中的主要内容,如果未能解决你的问题,请参考以下文章