我想更新從表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 無效令牌
誰能幫助我?
我想更新從表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 無效令牌
誰能幫助我?
這是不可能用JOIN
做到這一點。火鳥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
。在你的評論索要相當於查詢做火鳥如下:
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
你可以使用這樣的:
update INVOICE_ITEMS
set DISCOUNT = 3
from (select * from ITEM_PRICE_QUNTITY) b
where INVOICE_ITEMS.ITEM_PRICE_NO = B.ID and
INVOICE_ITEMS.INVOICE_ID = 33
不,它不起作用 – azad
它一定是工作。 看看fidlle:[小提琴](http://sqlfiddle.com/#!6/22b02/2) 你能分享你的表箱箱腳本嗎? –
@ErsinTarhan問題是關於Firebird的這種語法無效的問題,這個問題最初是用_sql-server_標記的。 –
只是用分隔符「;」在聲明 – mohan111
結束時嘗試刪除'A.DISCOUNT'中的'A' –
注意:我已經刪除了_sql-server_標記:您的問題不是關於SQL Server(Microsoft產品),而是關於Firebird。請只添加相關標籤到您的問題 –