【问题标题】:SQL CONCAT String + Column in WHERE clauseSQL CONCAT 字符串 + WHERE 子句中的列
【发布时间】:2014-09-26 08:26:57
【问题描述】:

我在 Foo.A 中得到了一个数值,它在 Bar 中有一个等价的值,但带有一个字符串前缀(“Z”)。我正在尝试将“Z”附加到 Bar.A col 值。我也尝试了CONCAT,但没有任何成功。以下代码返回“未知列 Z”。

UPDATE Foo, Bar
SET Foo.B = Bar.B
WHERE Foo.A = Z + Bar.A

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

【问题讨论】:

  • 你用的是什么数据库?
  • 首先,Z 必须是带引号的字符串文字 'Z'。除此之外,连接方法因数据库引擎而异。
  • @MichaelBerkowski 我刚刚注意到。谢谢你。我会指定我的引擎。
  • @MichaelBerkowski 编辑了我的答案。

标签: mysql sql concatenation where


【解决方案1】:

您缺少 Z 周围的单引号,即您的代码应该是:

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

【讨论】:

  • + 真的适用于 MySQL 中的字符串连接吗?
  • @JoachimIsaksson 你是对的,+ 在 MySQL 中不起作用。更正了代码。
【解决方案2】:

其实我找到了。我错过了CONCAT 中的""

这是有效的:

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

【讨论】:

    【解决方案3】:

    你在哪里加入语句,你在更新语句中使用表 B,在 where 条件中使用表 A。这是行不通的

    【讨论】:

    • 与其说“这行不通”,不如解释一下原因和解决方法(如果有)会有所帮助。
    【解决方案4】:

    如果您的语法有效,那么您很可能正在使用 MySQL。无论如何,问题是您需要在字符串常量周围加上引号。所以试试这个:

    UPDATE Foo join
           Bar
           on Foo.A = concat('Z', Bar.A)
        SET Foo.B = Bar.B;
    

    无论数据库如何,您都应该始终对字符串和日期常量使用单引号。那是ANSI标准,它减少了出错的可能性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多