我收到了错误
执行此查询时无法修改子查询中使用的表或视图
。
raw_str
中的my_table_view
引用了raw_str
中的my_table
。
请建议如何更新'flag'。
update my_table
set flag = 'X'
where raw_str = (
select raw_str from my_table_view
where a_num in
(
select num_id from num_table
where state not in (0, 1, 7, 99, 10, 11, 20, 21)
)
)
提前致谢。
答案 0 :(得分:0)
正确的答案是dbms依赖,使用MS-SQL 2000 2005 2008和sybase你可能会使用强大的 使用特殊子句 WITH(NOLOCK) UPDATE FROM ,以强制重用派生表“my_table_view”。
对于其他dbms(ORACLE Informix),您必须将子查询加载到 temp
这是你的平台吗?
侨 迭
Sql server 2005 2008更新自:
UPDATE B1
SET
B1.PARAMETER_DS = 'UPDATED'
FROM
B_PARAMETERS B1 WITH(ROWLOCK)
INNER JOIN
(SELECT B2.* FROM
B_PARAMETERS B2 WITH(NOLOCK)
WHERE FAMILY_ID = 5 ) B2
ON
B1.PARAMETER_PK = B2.PARAMETER_PK
WHERE
B2.PARAMETER_VL = 'X';
对于Oracle:创建全局临时表How to create a temporary table in Oracle 对于Informix创建临时表:Insert into temp values (select.... order by id)