0
我试图在记录列表上运行更新,并根据一些计算修改列。这是我的查询(我的查询实际执行金额的重分配到NET和增值税):更新从整个表上运行
update transaction_details
set amount = (
CASE WHEN id = x.netID THEN x.calculated_NET
WHEN id = x.vatID THEN x.calculated_VAT
END
)
from
(select
d1.id as 'netHmy',
d2.id as 'vatHmy',
round(((d1.amount + d2.amount)/1.18) * 0.18, 2) 'calculated_VAT',
round((d1.amount + d2.amount)/1.18, 2) 'calculated_NET'
from transaction_details d1 join transaction_details d2 on d1.id = d2.netID
where
1 = 1
-- multiple conditions
) as x
选入X平台是175
的记录,但是当我运行此查询它会在整个transaction_details表(在4.000.000记录)。
我知道,操作中查询的顺序是
1. FROM clause
2. WHERE clause
3. GROUP BY clause
4. HAVING clause
5. SELECT clause
6. ORDER BY clause
所以我期待更新的结果被约束到选定的175条记录,但显然它会在整个表和结果4.354.665 rows affected
。
在UPDATE语句中操作的顺序是不同的,还是我应该重新设计我的查询?
对不起,我不得不编辑我的查询,不得不更换列名,但我错过了一些嵌套选择。现在是正确的,谢谢你指出。 –