SQL错误360:无法修改子查询中使用的表或视图

时间:2011-05-26 09:39:16

标签: sql

我收到了错误

  

无法修改子查询中使用的表或视图

执行此查询时

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)
                        )
                )

提前致谢。

1 个答案:

答案 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)