Informix更改/更新表信息

时间:2013-01-22 01:03:39

标签: sql sql-update informix

我正在使用informix数据库,并希望将显示的值从“N”更改为“Y”... 我正在运行以下sql但似乎得到语法错误:

UPDATE tablename 
SET displayed ='Y' 
WHERE flag= 'S' OR flag ='DEP' OR flag = 'WTD';

我正在使用或者,因为在所有3种情况下我希望显示为Y. 有关正确语法以及如何在informix中更新或更改表的任何帮助都会有所帮助。 感谢

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望更新列,如果它包含所有三个值:
'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更改为组内的公共行值。

答案 1 :(得分:0)

在理解了你的问题后,我尝试了以下内容,它对我有用,我没有在Informix上发现任何语法错误。

以下是我试过的

UPDATE <TABLE_NAME>
SET action='A'
WHERE action = 'I' OR action = 'U';"

Database selected.


57 row(s) updated.


Database closed.

所以语法上我没有发现错误。

你能分享你得到的语法错误吗?

确保所有列都存在于同一个表中,或者如果它们位于其他表中,则使用别名。

与EXISTS

相比,使用IN关键字效率低下

以下替代方法:

UPDATE <TABLE_NAME>
SET action='A'
WHERE EXISTS
(    SELECT action 
     FROM <SAME_TABLE_NAME>
     WHERE action = 'I' OR action = 'U'
);

这也经过了试验和测试,并为我工作。

干杯。