Обновление с помощью подзапроса - PullRequest
2 голосов
/ 11 февраля 2010

У меня проблема с запросом.

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

Структура выглядит так:

Firmen
------
ID
City
State
ZipCode


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

Теперь я хочу, чтобы все пустые ('' или NULL) поля состояния Firmen обновлялись с их соответствиями 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 )

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

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

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

  • 1024 * Дэннис *

Ответы [ 2 ]

4 голосов
/ 11 февраля 2010

Похоже, он должен работать правильно. Я бы выполнил следующий запрос:

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