我正在使用informix数据库,并且想要将显示值从'N'更改为'Y'... 我正在运行以下sql,但似乎得到语法错误:Informix更改/更新表信息
UPDATE tablename
SET displayed ='Y'
WHERE flag= 'S' OR flag ='DEP' OR flag = 'WTD';
我用的还是,因为在所有3种情况下,我希望显示的是Y. 任何关于正确的语法以及如何更新或改变Informix中的表将是有益的帮助。 感谢
我正在使用informix数据库,并且想要将显示值从'N'更改为'Y'... 我正在运行以下sql,但似乎得到语法错误:Informix更改/更新表信息
UPDATE tablename
SET displayed ='Y'
WHERE flag= 'S' OR flag ='DEP' OR flag = 'WTD';
我用的还是,因为在所有3种情况下,我希望显示的是Y. 任何关于正确的语法以及如何更新或改变Informix中的表将是有益的帮助。 感谢
如果我的理解是否正确,要更新列,如果它包含所有三个值:
'S', 'DEP', 'WTD'
。
您可以创建一个子查询来获取具有所有三个值的行,例如。
UPDATE tableName
SET displayed = 'Y'
FROM tableName,
(
SELECT primary
FROM tableName
WHERE flag IN ('S', 'DEP', 'WTD')
GROUP BY primary
HAVING COUNT(flag) = 3
) b
WHERE tableName.primary = b.primary
只是将列Primary
更改为组内的公共行值。
大家好,谢谢你的回答....它现在可以工作了...感谢帮助 – user1971376
'带连接的更新'符号的交叉引用是XPS(扩展并行服务器)中的一个特性,而不是常规的Informix (IDS - Informix Dynamic Server)。 XPS不是正式报废,而是不积极开发或广泛使用。无论如何,使用UPDATE-with-join应该是矫枉过正的;原来的查询应该没问题。 –
理解你的问题后,我试过的东西,如下所示,它的工作对我来说,我没有找到任何Informix的语法错误。
下面是我的尝试
UPDATE <TABLE_NAME>
SET action='A'
WHERE action = 'I' OR action = 'U';"
Database selected.
57 row(s) updated.
Database closed.
所以语法我没有发现任何错误。
你能分享你得到的语法错误吗?
确保所有列存在于同一个表中,或者如果它们在其他表中,则使用别名。
使用关键字相比EXISTS
以下可供选择的方法是低效的:
UPDATE <TABLE_NAME>
SET action='A'
WHERE EXISTS
( SELECT action
FROM <SAME_TABLE_NAME>
WHERE action = 'I' OR action = 'U'
);
这也尝试和测试以及为我工作。
干杯。
你有什么错误?语法看起来正确。 –
对于有'flag ='S'或flag ='DEP'或flag ='WTD''的记录,您是否有任何主键或共同的值? –
SQL看起来没问题。你可以用WHERE flag IN('S','DEP','WTD')来简化它,但它实际上是一样的。有没有一种索引或约束被这种变化所侵犯?你能用你得到的确切错误更新你的问题吗? – RET