gpt4 book ai didi

sql - 用联接更新表?

转载 作者:行者123 更新时间:2023-12-04 23:00:53 26 4
gpt4 key购买 nike

我正在尝试使用表B中的数据更新表A。
我以为我可以做这样的事情

update A 
set A.DISCOUNT = 3
from INVOICE_ITEMS A
join ITEM_PRICE_QUNTITY B on A.ITEM_PRICE_NO = B.ID
where A.INVOICE_ID = 33

但出现错误
SQL讯息:-104
token 无效

谁能帮我?

最佳答案

不能使用JOIN做到这一点。 Firebird UPDATE语句没有FROM子句。 syntax是:

UPDATE {tablename | viewname} [[AS] alias]
SET col = newval [, col = newval ...]
[WHERE {search-conditions | CURRENT OF cursorname}]
[PLAN plan_items]
[ORDER BY sort_items]
[ROWS <m> [TO <n>]]
[RETURNING <values>]

<m>, <n> ::= Any expression evaluating to an integer.
<values> ::= value_expression [, value_expression ...]
<variables> ::= :varname [, :varname ...]
但是,与示例查询等效的是:
update INVOICE_ITEMS 
set DISCOUNT = 3
WHERE EXISTS (SELECT 1 FROM ITEM_PRICE_QUNTITY B WHERE B.ID = ITEM_PRICE_NO)
AND INVOICE_ID = 33
如果要使用其他表中的数据进行更新,则可能需要考虑使用 MERGE 。在您的评论中,您要求进行等效查询以对Firebird执行以下操作:
UPDATE B 
SET B.QUANTIY = b.QUANTIY + a.QUANTITY
FROM ITEM_PRICE_QUNTITY B JOIN INVOICE_ITEMS A ON A.ITEM_PRICE_NO = B.ID
WHERE A.INVOICE_ID = 33
等效的 MERGE语句为:
MERGE INTO ITEM_PRICE_QUNTITY AS B
USING INVOICE_ITEMS AS A
ON A.ITEM_PRICE_NO = B.ID AND A.INVOICE_ID = 33
WHEN MATCHED THEN
UPDATE SET B.QUANTIY = B.QUANTIY + A.QUANTITY

关于sql - 用联接更新表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24800340/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com