问题描述
|
我得到了错误
无法修改子查询中使用的表或视图
在执行此查询时。
在此,“ 1”中的“ 0”引用了“ 3”中的“ 0”。
请提出如何更新\'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)
)
)
提前致谢。
解决方法
正确答案取决于dbms,使用MS-SQL 2000 2005 2008和sybase可能会使用功能强大的
带有特殊子句WITH(NOLOCK)的UPDATE FROM,以强制重用派生表\“ my_table_view \”。
对于其他dbms(ORACLE Informix),必须将子查询加载到临时数据库
您的平台是哪个?
再见
地亚哥
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:创建全局临时表如何在Oracle中创建临时表
对于Informix创建临时表:插入临时值(选择...。按ID排序)