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

SQL错误360:无法修改子查询中使用的表或视图,sql,Sql,我弄错了 无法修改子查询中使用的表或视图 执行此查询时 此处my\u table\u视图中的raw\u str引用了my\u table中的raw\u str 请建议如何更新“标志” update my_table set flag = 'X' where raw_str = ( select raw_str from my_table_view where a_num in (

我弄错了

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

执行此查询时

此处
my\u table\u视图中的
raw\u str
引用了
my\u table
中的
raw\u str

请建议如何更新“标志”

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

提前感谢。

正确答案取决于dbms,使用MS-SQL 2000 2005 2008和sybase,您可以使用强大的 更新,使用特殊子句和(NOLOCK)以强制重用派生表“我的表视图”

对于其他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:创建全局临时表
对于Informix创建临时表:

什么样的SQL方言?对于MS SQL Server,应允许此类操作;例如,对于MS Access来说,不可能是最新版本的Informix IDS支持行为更新。在任何情况下,温度表中的负载也适用于旧标准发动机。