2010-02-11 3 views
2

У меня проблема с запросом.Обновление с подзапросом

У меня огромный стол с почтовыми индексами из Германии под названием «Postleitzahlen». Существует еще одна таблица с компаний под названием «Firmen»

Структура такова:

Firmen 
------ 
ID 
City 
State 
ZipCode 


Postleitzahlen 
-------------- 
ZipCode 
State 

Теперь я хочу, все пустые («» или NULL) Государства-поля Firmen обновляются с их correspendants из Postleitzahlen

Это мой фактический запрос:

UPDATE 
    Firmen 
SET 
    Firmen.State = Postleitzahlen.State 
FROM 
    Postleitzahlen 
INNER JOIN 
    Firmen ON Postleitzahlen.ZipCode = Firmen.ZipCode 
WHERE 
    (
     Firmen.State = '' 
    OR Firmen.State IS NULL) 

Я получаю ответ с xx затронутыми строками, но на самом деле ничего не обновляется.

Может кто-нибудь мне помочь?

Заранее спасибо.

  • Дэннис
+0

Вы можете изменить тег MSSQL в TSQL. Это используется немного больше –

ответ

4

Это выглядит, как она должна работать правильно. Что бы я сделал, выполните приведенный ниже запрос:

SELECT Firmen.State,Postleitzahlen.State 
FROM 
    Postleitzahlen 
INNER JOIN 
    Firmen ON Postleitzahlen.ZipCode = Firmen.ZipCode 
WHERE 
    (
     Firmen.State = '' 
    OR Firmen.State IS NULL) 

Посмотрите, что вы получите. Если вы получаете результаты со значениями в обоих столбцах, вы, вероятно, имеете другую проблему. Тем не менее, я предполагаю, что один из столбцов пуст или пуст, поскольку вы обновляете строки, но ничего не изменяется.

Тогда в вашем запросе не будет ничего плохого. Я думаю, что это может быть с вашим обновлением. Попробуйте сделать стол псевдоним, например:

UPDATE 
    F 
SET 
    F.State = Postleitzahlen.State 
FROM 
    Postleitzahlen 
INNER JOIN 
    Firmen F ON Postleitzahlen.ZipCode = F.ZipCode 
WHERE 
    (
     F.State = '' 
    OR F.State IS NULL) 
+0

Я получаю два столбца, первый столбец всегда пуст, второй столбец (всегда) заполняется значениями. В любом случае, запрос выполняется, я получаю xx пострадавшие результаты, но никаких изменений нет:/ любые идеи? – hubbl

+0

Проверьте мое обновление. Я думаю, это может быть из-за того, что Update не использует значение с псевдонимом. Мне кажется, что я столкнулся с этим несколько лет назад, потому что теперь, когда я запускаю обновления, я всегда псевдоним таблицы, которую я обновляю. Если это не работает, вы можете попробовать подзапрос. Это не оптимально, но оно должно работать. Я могу дать вам код для этого, если он не работает. –

+0

Было бы неплохо, если бы вы опубликовали этот запрос с подзапросом, ваш обновленный запрос в псевдониме также не работает fyi: одно поле - varchar, другое - nvarchar, но я обнаружил, что это не может быть причиной .. – hubbl

1
UPDATE 
    Firmen f 
SET 
    f.State = (SELECT p.State FROM Postleitzahlen p WHERE p.ZipCode = f.ZipCode) 
WHERE 
    (
     f.State = '' 
    OR f.State IS NULL) 
Смежные вопросы