在WHERE子句中连接字符串和列的SQL CONCAT操作。

3
我在Foo.A中得到了一个数值,并且它在Bar中有一个相应的字符串前缀(“Z”)。我试图将“Z”附加到Bar.A列值。我还尝试使用CONCAT,但没有成功。下面这段代码返回“未知列Z”。
UPDATE Foo, Bar
SET Foo.B = Bar.B
WHERE Foo.A = Z + Bar.A

例如,14 (Foo.A) = Z14 (Bar.A)。

你使用的是哪个数据库? - Gordon Linoff
1
首先,Z必须是一个带引号的字符串字面量“'Z'”。此外,连接方法因数据库引擎而异。 - Michael Berkowski
@MichaelBerkowski 我刚刚注意到了。谢谢。我会指定我的引擎。 - Wistar
@MichaelBerkowski 修改了我的答案。 - Wistar
4个回答

3
如果您的语法没有问题,那么很可能您正在使用MySQL。无论如何,问题在于您需要在字符串常量周围加上引号。所以请尝试这样做:
UPDATE Foo join
       Bar
       on Foo.A = concat('Z', Bar.A)
    SET Foo.B = Bar.B;

无论使用哪种数据库,您应始终使用单引号表示字符串和日期常量。这是ANSI标准,可以降低出错的可能性。


1

你忘记了在 Z 周围加上单引号,即你的代码应该是:

UPDATE Foo, Bar
SET Foo.B = Bar.B
WHERE Foo.A = CONCAT('Z', Bar.A);

在MySQL中,+真的可以用于字符串连接吗? - Joachim Isaksson
@JoachimIsaksson 您是正确的,MySQL中不支持+。已更正代码。 - Zeno

0

其实我找到了。我在CONCAT中漏掉了""

现在它可以正常工作:

UPDATE Foo, Bar
SET Foo.B = Bar.B
WHERE Foo.A = CONCAT("Z", Bar.A)

-1

你的连接语句在哪里?你在更新语句中使用了表B,在where条件中使用了表A。这样是行不通的。


不要只说“这行不通”,如果有的话,解释为什么不行,并提供解决方法会更有帮助。 - siva.k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接