【问题标题】:inner-join in MYSQL with UPDATE not workingMYSQL中的内部连接,UPDATE不起作用
【发布时间】:2014-09-16 16:55:45
【问题描述】:

语法不起作用并在 @rt:= 上返回错误 #1064 错误... 我不知道在哪里放置变量以便它工作。

UPDATE table 
@rt:=@rt+quantity;
INNER JOIN (SELECT @rt:=0) AS init ON 1=1
SET status='1'
WHERE price<10
AND @rt<=22

带有 SELECT 的工作表 http://sqlfiddle.com/#!2/1f125c

【问题讨论】:

    标签: mysql select join inner-join


    【解决方案1】:

    一种方法是:

    UPDATE `table`
        SET status = '1'
        WHERE price < 10
        limit 22;
    

    您不需要该变量来限制行数。这将更新价格满足where 子句中条件的 22 行。这是我对你想要做什么的最佳猜测。

    编辑:

    哦,您正在尝试获取数量的总和。也许这会做你想要的:

    UPDATE `table` cross join
           (SELECT @rt := 0) vars
        SET status = if((@rt := @rt + quantity) <= 22, '1', status)
        WHERE price < 10;
    

    SQL Fiddle 是 here

    【讨论】:

    • 感谢您的回复,但这不起作用 - @rt 指定表格中的数量,看起来像价格/数量/状态我添加了一个 SQL 小提琴
    • @tttddfd 。 . . table 是一个非常糟糕的表名称。你需要把它放在反引号中。
    • 好吧,它工作了......但是,它已将任何价格标记为低于 10 状态 1 所以即使@rt 的总数量超过 22
    • @tttddfd 。 . .我在想这可能会发生。 where 子句在set 之前评估,因此递增不会影响过滤。这可以通过更改 set 子句中的条件来解决。
    • 它仍然用 1 标记所有内容 --> 只有价格 9 和 9.1 的状态应该更新为 1,也许根本不可能 SQL fiddle sqlfiddle.com/#!2/64b2d4/1
    猜你喜欢
    • 2014-05-28
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    相关资源
    最近更新 更多