проблема обновления t-sql - PullRequest
       16

проблема обновления t-sql

1 голос
/ 02 февраля 2012

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_group) grp_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 - это внешний ключ для grp_id в tbl_group.

В таблицеtbl_indicator, для одного набора grp_nbr и sect_nbr есть indicat, для того же набора grp_nbr и sect_nbr есть правильное indicat (555,1, 100, p)и мусор indicat (333, 1, 100, а) в таблице tbl_group, но оба эти grp_id (333, 555) присутствуют в таблице tbl_orders.

И еще одна вещьздесь указывается, что нежелательные данные (индикаты) в групповой таблице (222, 02987, 101, у) grp_nbr имеют на одну длину символа меньше, чем grp_nbr в tbl_indicat.Он должен использовать что-то вроде оператора «LIKE»

Как мы можем справиться с этим ??

Теперь мне нужно обновить таблицу tbl_order таким образом, чтобы заменить ненужные grp_id s.с правильными значениями grp_id s

Вывод должен выглядеть следующим образом:

tbl_orders

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

У меня уже есть ответ, если оба столбца в данных tbl_indicat и tbl_grp таблицы одинаковы ...

Ответил 'Dr.Wily's Apprentice '

sql update (помогите мне)

но как справиться, если данные отличаются (например, пропущены некоторые строки при запуске)?

1 Ответ

0 голосов
/ 24 февраля 2012
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...