【发布时间】:2014-08-21 19:15:22
【问题描述】:
我正在尝试使用 TableB 中的相应 ADDR_ID 更新下面 TableA 中的多个列。这是一个 sn-p,实际上我在 TableA 中有 30 个位置,在 TableB 中有 30 个 EXT_ID,因此执行更新语句需要很长时间。问题是 TableA 中的 30 个位置中的任何一个都可能存在于 TableB 中的 30 个 EXT_ID 中的任何一个中。
例如,在 TableA 中,ID = 44231,位置 A35555 可能在 EXT_ID_27 中的 TableB 中匹配,所以我真的希望有人能提出比 900 条更新语句更好的替代方案...
下面的 SQL 小提琴
表A
+---------+-----------+-------------------------------------+----------------+-------------------------------------+
| ID | LOC_1 | LOC_1_ADDR_ID | LOC_2 | LOC_2_ADDR_ID |
+---------+-----------+-------------------------------------|----------------+-------------------------------------|
| 44231 | A35555 | Trying to Populate Should Be Z76543 | B68754 | Trying to Populate should be Z45545 |
| 87563 | A36666 | Trying to Populate Should Be Z83465 | Q23548 | Trying to Populate should be Z89224 |
| 85387 | R14587 | Trying to Populate Should be Z66371 | A35555 | Trying to Populate should be Z93827 |
+---------+-----------+-------------------------------------+----------------+-------------------------------------|
TableB(每个 REC_ID 的 EXT_ID 是唯一的,但多个 REC_ID 可能具有相同的 EXT_ID)
+---------+-----------+-------------+-----------+-----------+
| REC_ID | ADDR_ID_1 | EXT_ID_1 | ADDR_ID_2 | EXT_ID_2 | (28 more external ID columns)
+---------+-----------+-------------+-----------+-----------+
| 44231 | Z76543 | A35555 | Z45545 | B68754 |
| 87563 | Z83465 | A36666 | Z89224 | Q23548 |
| 85387 | Z93827 | A35555 | Z66371 | R14587 |
+---------+-----------+-------------+-----------|-----------+
http://sqlfiddle.com/#!3/02d5c/5/0
感谢您的任何建议!
【问题讨论】:
-
如果我理解正确的话,你需要用表B中的相应值更新表A中的30列,并且每个连接应该发生在不同的列上(LOC_1 = EXT_ID_1更新LOC_1_ADDR_ID,LOC_2 = EXT_ID_2更新 LOC_2_ADR_ID 等)?
-
排序,Loc_1 = EXT_ID_1 到 EXT_ID_30(可能是 30 个 EXT_ID 列中的任何一个中的匹配项),但在这 30 个 EXT_ID 中只存在一个匹配项。我正在阅读您的建议,谢谢。
标签: sql sql-server sql-server-2008 sql-update