【问题标题】:How to update a row based a joined table in MariaDB?如何在 MariaDB 中更新基于连接表的行?
【发布时间】:2018-05-12 18:29:43
【问题描述】:

我有这样的 sql:

UPDATE "user_login a" 
    LEFT OUTER JOIN "p_pegawai b" 
    ON a.id_pegawai = b.id  
    SET a.password = 'Keluarga1'  
    WHERE b.NIP = '195812' 

我试过这个: MySql Update A Joined Table

但它总是给我错误

您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的 '"user_login a" LEFT OUTER JOIN "p_pegawai b" ON a.id_pegawai = b.id SET a.passw' 附近使用正确的语法

我使用的是 MariaDB,而不是 Mysql,我的查询会出现什么问题?

【问题讨论】:

  • 尝试对表名user_login使用反引号

标签: sql mariadb


【解决方案1】:

在 MySQL 中使用反引号,但不要将它们应用于 组合表和别名,它们必须被视为单独的项目

UPDATE `user_login` a 
    LEFT OUTER JOIN `p_pegawai` b
    ON a.id_pegawai = b.id  
    SET a.password = 'Keluarga1'  
    WHERE b.NIP = '195812' 

【讨论】:

  • 为什么要用这么笨的语法?
  • 这个问题没有答案。语言语法规则就是这样,规则。它们的存在是为了可以准确地解析指令(并转换为较低级别的指令)。从“愚蠢”到“聪明”的主观评估确实无助于适应语法规则。在最初的问题中,该人在一组引号之间包含了 2 个元素:这根本行不通,因为您不能将表名 (1) 及其别名 (2) 视为一个字符串
【解决方案2】:

您当前将带有别名的整个表名放在双引号中。删除双引号,更新查询应该可以工作:

UPDATE user_login a 
LEFT JOIN p_pegawai b
    ON a.id_pegawai = b.id
SET a.password = 'Keluarga1'  
WHERE b.NIP = '195812';

虽然双引号(以及反引号)是一种转义列名或表名的方法,但您不需要这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 2016-08-02
    相关资源
    最近更新 更多