Я думаю, это должны быть столбцы в 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. Может быть, это то, что вы хотите.
Это решения относительно бизнес-правил: только вы знаете, что вы хотите сделать.