2012-02-02 78 views
1

tbl_indicator噸-SQL更新問題

grp_nbr, sect_nbr, indicat 
0p 
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_id是外部鍵012 在tbl_group

在表tbl_indicator,對於一組grp_nbrsect_nbr存在indicat,對於同一組的grp_nbrsect_nbr有一個正確indicat(555,1,100,p)和一個垃圾indicat(333 1 ,100,a)在表tbl_group中,但這兩個grp_id(333,555)存在於表tbl_orders中。

還有一點這裏的是,在組表(222,02987,101,y)處的grp_nbr具有比tbl_indicatgrp_nbr少一個字符長度的垃圾數據(indicat)。它應該使用'LIKE'運算符

我們該如何處理?

現在我需要以這樣的方式來更新tbl_order表垃圾grp_id S的關係有正確grp_id小號

更換輸出應該想:

tbl_orders

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

我已經有答案,如果tbl_indicattbl_grp表中的列數據都是相同的......

這是由'博士回答Wily的學徒」

sql update (help me)

,但如何處理,如果該數據是不同的(如在出發缺少一些字符串)?

+3

歡迎使用StackOverflow:如果您發佈代碼,XML或數據示例,請**在文本編輯器中突出顯示這些行,然後單擊編輯器上的「代碼示例」按鈕(「{}」)工具欄以很好的格式和語法突出顯示它! – 2012-02-02 17:45:36

+0

如果將這些列轉換爲數字並將它們進行數字比較,則可以忽略前導零。你如何確定哪些是「垃圾」記錄? – 2012-02-02 17:52:07

+0

我不能將它轉換爲數字b/c我的一些數據包含字符 – 2012-02-02 17:57:08

回答

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