mysql 同一条SQL语句,执行结果不一样。这是为什么?

mysql 同一条SQL语句,执行结果不一样。这是为什么?,第1张

条件只是new_rank <4

new_rank 则是@rank这个变量生成的。

逻辑是根据@rank:=reporter_id是否跟上次相同,如果跟上次不同则执行 @rank:=1这个赋值中导致@rank等于1。然后相同执行@rank:=@rank+1。reporter_id出现4次@rank大于3后不显示。

图1执行的时候没定义类型,所以@tmp还存在最后一行查询的值并且字段类型变成了字符串。导致if条件判断为“非”,无脑触发 @rank:=1导致全部值都等于1

图2是正常的。

like和not都是运算符,两者不得混在一起使用,情况就跟一同时乘以除以二(1 * / 2)一样,系统搞不清楚该如何运算它。

建议修改SQL查询语句如下:

Select Count(*) as cnts From table1 Where InStr(Comment,'$')=0 or IsNull(InStr(Comment,'$'))

从你的说明来看,数据肯定是没问题的了,而设置也不会造成这种情况,所以我猜有可能是程序的问题了。

adapter的Fill方法默认是将读取到的新数据【添加】到你指定的DataSet里,所以如果你对比测试两个数据库时写成了这样:

OleDbDataAdapter dp = new OleDbDataAdapter("select id from sys ",conn)

dp.Fill(dt)

foreach (DataRow dr in dt.Rows)

{

MakeTree(dr["id"].ToString())//一个自定义的函数

}

OleDbDataAdapter dp = new OleDbDataAdapter("select id from sys ",conn2)

dp.Fill(dt)

foreach (DataRow dr in dt.Rows)

{

MakeTree(dr["id"].ToString())//一个自定义的函数

}

那dt中就一定会是1212,因为你连续Fill了两次。要避免这种情况应该在Fill前写入dt.Clear()

以上是猜测,如果不是这个原因,请QQ或者百度信箱联系我详细描述下好让我帮你解决问题。

QQ176229432 周1~5上班时间在线


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10030407.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存