t-sql更新问题

时间:2012-02-02 17:38:53

标签: sql sql-server sql-server-2005 tsql

tbl_indicator

grp_nbr,   sect_nbr,   indicat  
001234     100         p  
002345     101         s

tbl_group

grp_id,    grp_nbr,    sect_nbr,     indicat  
333        001987      100           a  
555        001987      100           p  
444        002987      101           s
222        02987       101           y

此处(tbl_groupgrp_id是主键

tbl_order

order_id,       grp_id
5000            333
5001            555
5002            555
5003            555
5004            444
5005            444
5006            222

tbl_order中,grp_idgrp_idtbl_group的外键。

在表格tbl_indicator中,对于一组grp_nbrsect_nbrindicatgrp_nbr同一组sect_nbrindicat中有一个正确的indicat(555,1,100,p)和一个垃圾tbl_group(333,1,100,a),但这两个{{1}表grp_id中存在(333,555)。

另外还有一件事是组表(222,02987,101,y)中的垃圾数据(指示)tbl_orders的一个字符长度小于{{1}中的grp_nbr }}。它应该使用'LIKE'运算符

我们如何处理这个?

现在我需要更新grp_nbr表,以便将垃圾tbl_indicat替换为正确的tbl_order s

输出应该如下:

tbl_orders

grp_id

如果grp_idorder_id, grp_id 5000 555 5001 555 5002 555 5003 555 5004 444 5005 444 5006 444 表格中的列数据相同,我已经回答了...

'博士回答Wily的学徒'

sql update (help me )

但如果数据不同(如在启动时缺少一些字符串)如何处理?

1 个答案:

答案 0 :(得分:0)

UPDATE o
SET o.grp_id = g2.grp_id
FROM tbl_order AS o
INNER JOIN tbl_group AS g1
    ON g1.grp_id = o.grp_id
INNER JOIN tbl_group AS g2
    ON g2.sect_nbr = g1.sect_nbr
    AND g2.grp_nbr = '0' + g1.grp_nbr