Обновите таблицу со значениями из другой таблицы (которая имеет 3 ключа и только 2 ключа, найденные в другой соответствующей таблице) - PullRequest
0 голосов
/ 27 октября 2018

Таблица 1 (Ключевые поля - Id, Account)

  • Id, Account, SalesRepID

Таблица 2 (Ключевые поля - Id, Account, Code)

  • Id, Account, Sequence, SalesRepID

Table1.SalesRepID должен быть обновлен с помощью Table2.SalesRepID, когда Table2.Sequence = 1. (Есть 10 последовательностей, и у каждой есть SalesRedID).

UPDATE Table1 SET SalesRepID = 
(select SalesRepID from Table2 
where Table1.ID = Table2.ID and 
Table1.Account = Table2.PatientAccount and Table2.Sequence = 1)

Это выдает ошибку -

Подзапрос вернул более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.

Пожалуйста, дайте мне знать, что должно быть исправлено в заявлении об обновлении? Следует ли использовать MERGE?

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Лучше вместо этого использовать JOIN.

UPDATE t1 
SET 
    t1.SalesRepID = t2.SalesRepID
FROM Table1 t1
JOIN Table2 t2 ON t1.ID = t2.ID AND t1.Account = t2.PatientAccount AND t2.Sequence = 1

Будет гораздо проще поддерживать и расширять.

0 голосов
/ 27 октября 2018

Какую часть ошибки вы не понимаете?

В Table2 есть несколько строк, соответствующих условиям. Вы можете найти их, используя:

select id, PatientAccount
from table2
where sequence = 1
group by id, PatientAccount
having count(*) > 1;

Вы можете заставить ваш запрос работать, используя:

update Table1 
    set SalesRepID = (select top (1) t2.SalesRepID
                      from Table2 t2
                      where Table1.ID = t2.ID and 
                            Table1.Account = t2.PatientAccount and
                            t2.Sequence = 1
                     );

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

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