运行总计的on子句中的未知列

时间:2017-02-27 23:06:20

标签: mysql sql

如果我取消注释LEFT JOIN

,为什么会出现此错误
#1054 - Unknown column 's.id' in 'on clause' 

在查询

中多次使用列s.id
SELECT s.id
     , s.qty
     , s.price_cost
     , @running_total:=@total running_total
     , @total:=@total+s.qty-s.qtyoff total
  FROM stock s
     , (SELECT @running_total:=0, @total:=0) vars
/*LEFT JOIN stockoff o ON o.stockoff_id=s.id*/
 WHERE s.block_id = 5659 
   AND s.type = 2 
   AND s.is_booked = 1 
   AND s.product_id = 18110 
   AND s.time <= 1514678400
 GROUP 
    BY s.id
HAVING running_total <= 0
 ORDER 
    BY s.time DESC
     , s.id DESC

1 个答案:

答案 0 :(得分:2)

我猜错误是因为您将连接操作的旧式逗号语法与较新的JOIN关键字混合使用。

放弃逗号

FROM stock s, (SELECT @running_total:=0, @total:=0) vars
            ^

并将其替换为适当的CROSS JOIN

FROM stock s CROSS JOIN (SELECT @running_total:=0, @total:=0) vars
             ^^^^^^^^^^

这只是猜测。我从未研究过在单个SELECT中混合使用两种不同语法时会发生什么。但没有充分的理由将它们混合在一起。 (也许问题中的错误足以让混合它们。

旧式逗号语法非常适合向后兼容,允许旧版SQL继续运行。但是新的SQL不需要使用它。