【问题标题】:Update MySQL table with JOIN on the same table?在同一个表上使用 JOIN 更新 MySQL 表?
【发布时间】:2014-09-06 22:13:37
【问题描述】:

我有一个存储与帐户相关联的会话哈希的表:

我想更新表中属于某个帐户的每个条目,但我没有该帐户的ID。我必须从同一张桌子上得到它。

目前我是这样做的:

注意,整个过程的唯一输入是Session Hash,命名为::INPUT_ADMIN_HASH

首先我得到 adminID:

SELECT admins_adminID FROM `adminSessions` WHERE `adminSessionHash` = :INPUT_ADMIN_HASH;

然后通过获得的 adminID 我更新同​​一张表:

UPDATE `adminSessions` SET `sessionValid` = FALSE WHERE `admins_adminID` = :INPUT_ADMIN_ID

我想将它们组合成一个查询:

UPDATE
    `adminSessions` AS a
INNER JOIN
    `adminSessions` AS b ON a.`adminSessionID` = b.`adminSessionID`
SET
    a.`sessionValid` = FALSE
WHERE
    a.`adminSessionHash` = :INPUT_ADMIN_HASH;

不起作用:Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Queries and reconnect.

我做错了什么?

【问题讨论】:

  • 您是否按照说明禁用安全模式?

标签: mysql join sql-update


【解决方案1】:

如果你不能禁用safe mode,你可以试试

UPDATE adminSessions 
   SET sessionValid = FALSE
 WHERE adminSessionHash = :INPUT_ADMIN_HASH
   AND adminSessionID IS NOT NULL;

我不知道这是否足以让MySQL 相信您使用了KEY 列。

附:顺便说一句,您的 JOIN 完全没有帮助。

【讨论】:

    猜你喜欢
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 2015-09-02
    • 1970-01-01
    • 2011-10-18
    • 2011-09-22
    相关资源
    最近更新 更多