使用具有声明值的MySQL的IN子句

时间:2009-01-01 22:31:18

标签: mysql

如果某个列在我提供的列表中有值,我正在尝试编写一个更新表中行的查询:

UPDATE MY_TABLE SET COL1 = 'xyz' WHERE COL2 IN ('x', 'y', 'z');

我收到语法错误,但我知道这应该是可能的。它本质上是执行以下3个命令的单个命令:

UPDATE MY_TABLE SET COL1 = 'xyz' WHERE COL2 = 'x';
UPDATE MY_TABLE SET COL1 = 'xyz' WHERE COL2 = 'y';
UPDATE MY_TABLE SET COL1 = 'xyz' WHERE COL2 = 'z';

值xyz是由用户动态设置的,可能有任意数量的值(或者我只是用冗长而糟糕的方式对其进行编码并完成它。我可以在<上找到的唯一信息em> IN 子句与子查询有关。有人可以帮我改写这个查询吗?

非常感谢。

4 个答案:

答案 0 :(得分:2)

您应该发布精确错误消息。错误消息将提供关于查询的哪个部分与解析器混淆的线索。

某些值x,y,z是否包含引号作为值的一部分?你可能有不平衡的报价。例如,以下显然是语法错误:

UPDATE MY_TABLE SET COL1 = 'xyz' WHERE COL2 IN ('O'Reilly', 'Smith', 'Jones');

提供更多信息,我将使用更多故障排除建议编辑此答案。

答案 1 :(得分:2)

所以现在每个人都在告诉我寻找不平衡的引用,我更仔细地查看了查询,并发现了以下内容:

UPDATE BOOK SET INVOICE_ID TO '1' WHERE START_NUMBER IN (1)

应该是:

UPDATE BOOK SET INVOICE_ID = '1' WHERE START_NUMBER IN (1)

感谢所有的帮助,但现在我感觉很好,很蠢。

答案 2 :(得分:0)

这是您的完整更新查询吗?看起来它缺少了最终部分。没有缺少的位,它看起来很好。你能发送收到的实际错误信息吗?

答案 3 :(得分:-3)

我很确定您不需要引用单个值。

UPDATE MY_TABLE SET COL1 = 'xyz' WHERE COL2 IN ('x, y, z');

这总是让我感到高兴。

如果值是数字,则根本不需要引号。