我正在使用 informix 数据库,并且想将显示的值从“N”更改为“Y”...我正在运行以下 sql,但似乎遇到了语法错误:
UPDATE tablename
SET displayed ='Y'
WHERE flag= 'S' OR flag ='DEP' OR flag = 'WTD';
我正在使用 or,因为在所有 3 种情况下我都希望显示为 Y。有关正确语法以及如何更新或更改 informix 中的表的任何帮助都会有所帮助。谢谢
我正在使用 informix 数据库,并且想将显示的值从“N”更改为“Y”...我正在运行以下 sql,但似乎遇到了语法错误:
UPDATE tablename
SET displayed ='Y'
WHERE flag= 'S' OR flag ='DEP' OR flag = 'WTD';
我正在使用 or,因为在所有 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
为组内的公共行值。
在理解了您的问题后,我尝试了以下方法并且它对我有用,我没有在 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'
);
这也经过了试验和测试,并为我工作。
干杯。