3

我有 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);
4

2 回答 2

3

似乎标准 SQL 应该可以工作:

UPDATE TableB B 
SET Name1=(SELECT Name from TableA A where A.ID=ID1), 
Name2=(SELECT Name from TableA A where A.ID=ID2), 
Name3=(SELECT Name from TableA A where A.ID=ID3);
于 2012-07-25T19:58:05.870 回答
0

这取决于您使用的 MSSQL 版本,但如果您使用的版本支持PIVOT关键字,我强烈建议您使用它。基本上,您可以“透视”一个表格并使用它将您的行变成列。

如果您没有这个,那么替代方法是使用临时表并自己进行数据透视。这是一个漫长的过程,但相当直截了当。这是一篇关于在 sql server 中使用临时表进行动态旋转的文章。希望这可以帮助!

于 2012-07-25T19:56:01.267 回答