MySQL INSERT重复键UPDATE与SELECT

php*_*_qq 5 mysql select on-duplicate-key

我有一个像下面这样的查询

INSERT INTO connections (`c_id`,`in`,`out`,`ip`,`userID`) 
VALUES ( 
    ( 
        SELECT c_id 
        FROM connections 
        WHERE (a bunch of conditions) 
        ORDER BY c_id DESC LIMIT 1 

    ),
    '1373799802',
    0,
    INET_ATON('127.0.0.1'),
    4

) 
ON DUPLICATE KEY UPDATE `out` = 1
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误

1093 - 您无法在FROM子句中为更新指定目标表"连接"

显然我在insert into on duplicate update语法中不能有SELECT子句,但我真的宁愿这样做,而不是运行2个查询.谁能告诉我怎么做到这一点?

Rah*_*hul 4

尝试像这样:

INSERT INTO connections (`c_id`,`in`,`out`,`ip`,`userID`) 
VALUES ( 
    ( 
SELECT p.c_id 
        FROM (select * from connections) p 
        WHERE (a bunch of conditions) 
        ORDER BY p.c_id DESC LIMIT 1 

    ),
    '1373799802',
    0,
    INET_ATON('127.0.0.1'),
    4

) 
ON DUPLICATE KEY UPDATE `out` = 1
Run Code Online (Sandbox Code Playgroud)

这个问题似乎是由于 mysql 版本 4.1.7 中的一个错误造成的,该错误指出

you can't update the same table which you use in the SELECT part
Run Code Online (Sandbox Code Playgroud)

这里

不确定这是否与您使用的版本相同。