【发布时间】:2023-03-30 07:39:01
【问题描述】:
我有一个主表(比如 tableA,其中包含 tab_a_id、field_code、field_id 列)。还有另一个表,比如 tableB,它有列 area_id 和 area_code。 tab_a_id 是 TableA 的主键。我想根据 field_code 更新 tableA 的 field_id。 tableA 的 field_code 和 tableB 的 area_code 匹配但不相同,意味着 field_code 有其他与 area_code 列不匹配的值。我想设置 field_id = area_id if field_code = area_code 但是,如果不匹配,它应该设置为默认值 -1,即“未知”字段。我尝试使用子查询和批量更新(例如 Update tableA SET field_id = (SELECT area_code from tableB where area_code = field_code))。这适用于有限的数据集。但我有 300 万条匹配记录,这意味着 300 万条子查询。另一个问题是有 700 万条记录,导致 400 万条不匹配的记录和无用的子查询。 是否有任何最佳方法可以以最少的时间和更高的效率更新此类记录。我尝试了合并命令,但与 forall 循环查询相比,它的性能很差
【问题讨论】:
-
我听不懂这个问题。样本数据,期望的结果会有所帮助。
-
请在代码问题中给出minimal reproducible example--剪切&粘贴&运行代码;具有期望和实际输出(包括逐字错误消息)的示例输入(作为初始化代码);标签和版本;明确的规范和解释。对于包含 DBMS 和 DDL 的 SQL,其中包括约束、索引和表格初始化。对于包括 EXPLAIN 结果和统计信息的 SQL 性能。 (约束、索引和计划至关重要。)在考虑发布之前请先研究一下。这包括 SQL 优化/性能的基础——直接导致索引、计划、统计和 SARGability。 How to Ask
标签: sql oracle join sql-update