Запрос на обновление SQL и «подзапрос вернул более одного значения» - PullRequest
3 голосов
/ 08 ноября 2010

Я использую SQL Server 2008, R2. Есть основная таблица (таблица A), и я пытаюсь обновить ее значениями из временной таблицы (таблица B).

SQL Server выдает ошибку, говоря, что подзапрос возвратил более одного значения, однако я не вижу, как это возможно, поскольку значение, возвращаемое подзапросом, является первичным ключом таблицы B.

Вот запрос:

UPDATE TableA  
   SET TableA.field = (SELECT TableB.field  
                         FROM TableA 
                   INNER JOIN TableB ON TableA.key = TableB.key) 

Любая помощь с благодарностью, как обычно!

Ответы [ 2 ]

7 голосов
/ 08 ноября 2010

Ваш подзапрос вообще не коррелирован.Идентификатор «TableA.key» в подзапросе ссылается на TableA в предложении FROM подзапроса, а не на целевую таблицу обновления (которая также является TableA).Вы не хотите обновлять TableA.field с помощью набора результатов объединения двух таблиц.Вы просто хотите это:

UPDATE TableA  
   SET TableA.field = (SELECT TableB.field  
                       FROM TableB
                       WHERE TableA.key = TableB.key)
1 голос
/ 08 ноября 2010

Вы сказали, что столбец, возвращаемый запросом (TableB.Field), является первичным ключом. Но проблема возникла из-за повторяющихся значений TableB.Key. Убедитесь, что TableB.Key не является дубликатом для любого значения. Здесь вам нужно будет ввести логин для возврата только одной записи, если подзапрос возвращает более 1 записи для значения. Например:

UPDATE TableA
   SET TableA.field = (SELECT Top 1 TableB.field
       FROM TableA
       INNER JOIN TableB ON TableA.key = TableB.key)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...