Синтаксис конкатенации - PullRequest
0 голосов
/ 30 декабря 2011

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

Пожалуйста, посмотрите и скажите мне, если вы видите, что я здесь не так ..

Спасибо !!

UPDATE TAB1 s  
        SET s.user_NUM =   
             (select e.USER# 
                  from TAB2 e   
                  where ('e.LAST_NAME'||','||' E.FIRST_NAME')= s.DEALER);

Ответы [ 2 ]

7 голосов
/ 30 декабря 2011

Я думаю, это должны быть столбцы в TAB2? Если это так, вам нужно удалить кавычки:

UPDATE TAB1 s
        SET s.user_NUM =   
             (select e.USER# 
                  from TAB2 e   
                  where (e.LAST_NAME||', '||E.FIRST_NAME)= s.DEALER);

В противном случае вы ищете совпадения с записями в TAB1 where DEALER = 'e.LAST_NAME, E.FIRST_NAME' (то есть литерале), что, я не думаю, является тем, что вы имели в виду.


"Когда я ставлю пробел после запятой, я получаю сообщение об ошибке, что одна строка запрос возвращает более одной строки. "

Таким образом, более одной строки в TAB2 соответствует строке в TAB1. Теперь это становится расследованием ваших данных.

Если для e.LAST_NAME||', '||E.FIRST_NAME есть только одно вхождение e.USER#, у вас все в порядке: вы можете просто добавить DISTINCT в подзапрос. Проверьте это с помощью:

select e.LAST_NAME||', '||E.FIRST_NAME
       , count(distinct e.USER#) 
from TAB2 e   
group by e.LAST_NAME||', '||E.FIRST_NAME
      having count(distinct e.USER#) > 1

Если этот запрос возвращает какие-либо строки, которые вам понадобятся, чтобы решить, как обрабатывать несколько попаданий.

Аналогично, вам нужно решить, какое действие предпринять, если в TAB2 нет строки, совпадающей со строкой в ​​TAB1. На данный момент для s.user_NUM будет установлено значение NULL. Может быть, это то, что вы хотите.

Это решения относительно бизнес-правил: только вы знаете, что вы хотите сделать.

1 голос
/ 30 декабря 2011

Я думаю, что проблема может быть в E.FIRST_NAME, который следует заменить на e.FIRST_NAME

UPDATE TAB1 s
    SET s.user_NUM =   
         (select e.USER# 
              from TAB2 e   
              where (e.LAST_NAME||','||e.FIRST_NAME)= s.DEALER);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...