1

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

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

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

4

2 回答 2

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为组内的公共行值。

于 2013-01-22T01:21:22.843 回答
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'
);

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

干杯。

于 2013-09-05T12:52:15.827 回答