首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL计数器列未正确填充

MySQL计数器列未正确填充
EN

Stack Overflow用户
提问于 2016-10-03 18:29:28
回答 1查看 57关注 0票数 0

我有一个MySQL查询,它使用变量生成计数器:

代码语言:javascript
复制
select
  zz.work_order,
  zz.op_number,
  @num := if(@wo = zz.work_order, @num+1,1) as 'steps_away',
  @wo := zz.work_order as 'dummyWO'
from
  (
   select
     w.work_order,
     w.op_number
   from
     [sql cut]
   order by
     w.work_order asc,
     r.op_number asc
) as zz

在MySQL工作台中执行此操作时,将正确填充steps_away。work_order的第一次出现具有steps_away = 1,下一次出现具有steps_away = 2等,直到看到新的工作顺序并重新设置计数器。

在Python中,我使用read_sql和to_sql函数将查询保存在DataFrame中,然后将其发送到数据库。

代码语言:javascript
复制
df = pd.read_sql(sql_cmd, engine)

无论我将这个df发送给带有df.to_csv的csv,还是发送到带有df.to_sql的表,steps_away列的值都是1。

在MySQL中直接运行查询和在Python中调用查询时,是什么原因导致查询看起来正确?

更新

我又测试了一下,发现了一些奇怪的东西。当我再次尝试MySQL工作台中的查询时,steps_away中的所有值(不正确)都等于1。我立即重新运行查询,没有任何更改,然后正确地填充了值。

我在Python中添加了两次pd.read_sql行,以匹配我手动执行的操作,DataFrame现在为steps_away提供了正确的值。如果在查询中使用这个计数器会导致这种行为,有时它可以工作,有时它不能工作,并且似乎两次调用查询都可以确保计数器列被正确填充?

EN

回答 1

Stack Overflow用户

发布于 2016-10-24 20:53:34

看起来,这一切都与MySQL相关,与python无关。需要先将变量设置为值来初始化它们。在from部分中的另一个子查询中这样做,问题就解决了。

代码语言:javascript
复制
select
  zz.work_order,
  zz.op_number,
  @num := if(@wo = zz.work_order, @num+1,1) as 'steps_away',
  @wo := zz.work_order as 'dummyWO'
from
  (
   select
     w.work_order,
     w.op_number
   from
     [sql cut]
   order by
     w.work_order asc,
     r.op_number asc
  ) as zz,
  (
   select
     @num:=0,
     @wo:=''
  ) as r
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39838143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档