SQL Как мне обновить, как это? - PullRequest
2 голосов
/ 02 июля 2010

Я пытаюсь обновить все строки SQL в таблице [Temp_LTGData], установив для значения [CORP_REG_NO] значение в другой строке в той же таблице, где совпадает [CUSTOMER_NUMBER].

В конечном счете, мне нужночтобы сделать это с помощью нескольких столбцов, кто-нибудь знает, можно ли это сделать?

Кажется, я не могу использовать псевдоним LTGSource, как в запросе на выборку: (

 Update [MandS].[dbo].[Temp_LTGData] LTGSource
    Set [CORP_REG_NO] = (SELECT [CORP_REG_NO] 
                           FROM [MandS].[dbo].[Temp_LTGData] 
                          WHERE ([CORP_REG_NO] IS NULL 
                            AND [CUSTOMER_NUMBER] = LTGSource.[CUSTOMER_NUMBER] ))
  where [CORP_REG_NO] IS NULL

Спасибо за отзывы, ребята, это действительно классная штука, я даже узнал несколько разных подходов кэта проблема (за вас проголосовали).

Ответы [ 3 ]

2 голосов
/ 02 июля 2010

Примерно так, что позволит вам иметь дело со многими столбцами с исходной и целевой строками.

Если вам нужно связать разные строки для разных столбцов, то это будет более сложно

Если японять правильно, фильтрация до CORP_REG_NO IS NULL будет работать только для CORP_REG_NO, конечно, поэтому вы не хотите фильтровать, за исключением ограничения целевых и исходных строк независимо от определенных фильтров столбцов в соответствии с вашим вопросом.

Update
   target
Set
   [CORP_REG_NO] = CASE WHEN target.[CORP_REG_NO] IS NULL THEN source.[CORP_REG_NO] ELSE target.[CORP_REG_NO] END,
    ...and again...
FROM
    [MandS].[dbo].[Temp_LTGData] target
    JOIN
    [MandS].[dbo].[Temp_LTGData] source ON target.[CUSTOMER_NUMBER] = source.[CUSTOMER_NUMBER]
WHERE
    a filter to restrict rows perhaps
2 голосов
/ 02 июля 2010

Попробуйте следующее, чтобы получить именно то, что вы делали

UDPATE [MandS].[dbo].[Temp_LTGData] LTGSource 
SET [CORP_REG_NO] = (SELECT [CORP_REG_NO] 
                     FROM [MandS].[dbo].[Temp_LTGData] 
                     WHERE ([CORP_REG_NO] IS NULL 
                          AND [CUSTOMER_NUMBER] = ToUpdate.[CUSTOMER_NUMBER] )) 
FROM {MandS].[dbo].[Temp_LTGData] ToUpdate
where [CORP_REG_NO] IS NULL

Однако в вашем запросе есть ошибка. Я считаю, что подзапрос должен быть НЕ НУЛЕЙ.

1 голос
/ 02 июля 2010

Попробуйте это:

UPDATE Temp_LTGData LTGSource
  SET Col1 = L2.Col1, Col2 = L2.Col2, Col3 = L2.Col3
FROM LTGSource L1
JOIN LTGSource L2 ON L2.CORP_REG_NO IS NOT NULL AND L1.CUSTOMER_NUMBER = L2.CUSTOMER_NUMBER
WHERE L1.CORP_REG_NO IS NULL 

Это должно сделать это для вас. Вы присоединяете обновляемую таблицу к себе, чтобы иметь доступ к старой и новой строкам для обновления. Таким образом, вы можете обновить несколько столбцов одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...