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