我有 2 张桌子。我需要更新数据中的数据tableB
,用来自的数据填充它tableA
。
但问题在于设计(注意:我无法更改设计,因为它是一个现成的系统。我只需要处理失败)。
可以说tableA
(2列)数据源的结构如下:
ID | NAME
1 dude
2 dud
3 bro
4 broo
5 killa
6 whale
--ID is an index and NAME is UNIQUE
现在tableB
(6列)目的地(对我来说很难):
ID1 | NAME1 | ID2 | NAME2 | ID3 | NAME3
1 dude 2 dud 3 bro
4 broo 5 killa 6 whale
--All columns here has UNIQUE data though it is not set on the design.
--and so on until the end.
现在我要做的是与那里的 ID 对应UPDATE
的名称中tableA
的名称。tableB
例子:
ID from TableA is 1
Find ID=1 on TableB
If ID=1 then UPDATE the next column to 'dude'
TableA 的示例结尾是:
ID | Name
9997 sweet
9998 jess
9999 grape
--The END
TableB 的示例结尾是:
ID1 | NAME1 | ID2 | NAME2 | ID3 | NAME3
9997 sweet1 9998 jess1 9999 grape1
--The END
请帮我。
笔记:
- 所有给定的表名和列名仅用于示例目的。
- 表中有更多列,但它们不需要更改/更改,因此我没有包含它们的示例。
- 原因是其中的数据
TableB
已更改,不再匹配正确的数据。 - 所以我需要用正确的数据重新填充
TableB
,而正确数据的唯一来源是TableA
. - 最后,我使用的是 SQL Server 2008。
- - - 编辑 - - -
这是我的最终查询,效果很好:
UPDATE CHAR_INFOR
SET
CHARID0=(SELECT CONVERT(VARCHAR,substring(char_data, 9, 16)) from CHAR_DATA0 A WHERE A.CHAR_KEY=CHAR0_KEY),
CHARID1=(SELECT CONVERT(VARCHAR,substring(char_data, 9, 16)) from CHAR_DATA0 A WHERE A.CHAR_KEY=CHAR1_KEY),
CHARID2=(SELECT CONVERT(VARCHAR,substring(char_data, 9, 16)) from CHAR_DATA0 A WHERE A.CHAR_KEY=CHAR2_KEY);