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

Таблица 1 (Ключевые поля - идентификатор, учетная запись)

  • 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)

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

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

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

Если существует более одной записи, для которой используется Table2.Sequence = 1, ваша логика обновления сама по себе не имеет смысла, потому что неясно значение который, которое вы хотите использовать в обновлении. Для достижения наилучших результатов добавьте к вашему вопросу несколько примеров данных.

Tim Biegeleisen 27.10.2018 15:32
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
232
2

Ответы 2

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

У вас есть несколько строк в 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
                     );

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

Вместо этого вам лучше использовать 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

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

Другие вопросы по теме