У меня есть 3 таблицы, которые я получил с помощью запроса из моей базы данных.
OverallTable
| Invoice | Product | Total | Delivered | Not Delivered |
---------------------------------------------------------
| 00001 | AAAA | 4 | null | null |
| 00001 | BBBB | 2 | null | null |
| 00001 | CCCC | 2 | null | null |
| 00002 | AAAA | 3 | null | null |
* Общая таблица в начальном состоянии
DeliveredTable
| Invoice | Product | Delivered |
---------------------------------
| 00001 | AAAA | 2 |
| 00001 | BBBB | 2 |
| 00001 | CCCC | 0 |
| 00002 | AAAA | 3 |
NotDeliveredTable
| Invoice | Product | Not Delivered |
---------------------------------
| 00001 | AAAA | 2 |
| 00001 | BBBB | 0 |
| 00001 | CCCC | 2 |
| 00002 | AAAA | 0 |
Вопрос в том, как мне вставить доставленные и недоставленные данные в таблицу TotalTable?
Я пытаюсь обновить, используя следующий запрос, но я получаю ошибку
Подзапрос вернул более 1 значения
UPDATE @OverallTemp
SET delivered =
(SELECT ddt.fqty FROM @DeliveredTemp ddt where ddt.PRODUCT=
[@OverallTemp].product)
WHERE EXISTS
(SELECT ddt.invoice FROM @DeliveredTemp ddt where ddt.invoice=
[@OverallTemp].invoice);
UPDATE @OverallTemp
SET notdelivered =
(SELECT sdt.qty FROM @NotDeliveredTemp sdt where sdt.PRODUCT=
[@OverallTemp].product)
WHERE EXISTS
(SELECT sdt.invoice FROM @NotDeliveredTemp sdt where sdt.invoice=
[@OverallTemp].invoice);
3 ответа
Вы не должны использовать EXISTS
, просто выполните JOIN
с оператором UPDATE
:
UPDATE ot
set ot.Delivered = dt.Delivered
FROM OverallTable ot INNER JOIN
DeliveredTable dt
ON dt.Invoice = ot.Invoice AND
dt.Product = ot.Product;
Ошибка говорит вам о проблеме, ваш подзапрос возвратил более 1 строки.
Если вы хотите INSERT
данных в таблицу, используя набор данных, то вы должны обрабатывать эти данные как набор данных, а не скалярное значение:
Например, для вашей первой попытки правильный запрос будет (обратите внимание, что это не используется):
UPDATE OT
SET delivered = ddt.fqty
FROM @OverallTemp OT
JOIN @DeliveredTemp ddt ON ddt.PRODUCT= OT.product;
Попробуйте второй запрос, и если у вас возникли проблемы, пожалуйста, оставьте комментарий.
Вы можете попытаться использовать UPDATE ...From ... JOIN
вместо подзапроса обновления.
update t1
set Delivered = t2.Delivered
from OverallTable t1
join DeliveredTable t2 on t2.Invoice = t1.Invoice
and t2.Product = t1.Product
update t1
set [Not Delivered] = t2.[Not Delivered]
from NotDeliveredTable t1
join NotDeliveredTable t2 on t2.Invoice = t1.Invoice
and t2.Product = t1.Product
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.