mysql语句在本地读取更新正常,但是放上服务器以后却无法正常更新,求大神指教!!!!

zion_ 2016-08-29 05:53:28
本人刚刚参加工作,目前碰到了以下问题:
下面的SQL语句在本地可以正常运行,但是程序放上服务器以后更新被更新成null;但是测试select语句是可以读取到数据的,求指教!
UPDATE chinaepgmenunameott t1
SET t1. HOUR = CAST(
floor(
(
SELECT
t.playtime - t1.playtime
FROM
(
SELECT
*
FROM
chinaepgmenunameott
) t
WHERE
t.startdate = t1.startdate
AND t1.sequencecode + 1 = t.sequencecode
) / 60
) AS SIGNED
),
t1.minutes = MOD (
(
SELECT
t3.playtime - t1.playtime
FROM
(
SELECT
*
FROM
chinaepgmenunameott
) t3
WHERE
t1.startdate = t3.startdate
AND t1.sequencecode + 1 = t3.sequencecode
),
60
)
...全文
418 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
giftsf 2016-09-05
  • 打赏
  • 举报
回复
引用 11 楼 zion_ 的回复:
[quote=引用 6 楼 giftsf 的回复:] 检查 SELECT t.playtime - t1.playtime FROM chinaepgmenunameott t1 JOIN chinaepgmenunameott t2 ON t1.startdate=t2.startdate AND t1.sequencecode + 1 = t2.sequencecode WHERE (t.playtime - t1.playtime) IS NULL ; 更新可以用 UPDATE chinaepgmenunameott t1 JOIN chinaepgmenunameott t2 ON t1.startdate=t2.startdate AND t1.sequencecode + 1 = t2.sequencecode SET t1.hour = CAST(FLOOR((t.playtime - t1.playtime)/60) AS SIGNED, t1.minutes = MOD((t.playtime - t1.playtime),60) ;
感谢解惑,这几天上班比较忙就没有注意论坛。 select语句显示为NULL 更新语句使用可以正常运行,实在是帮了大忙。 还有就是因为我现在解决问题的办法是将SELECT语句单独拉出来建立一张临时表,再用临时表更新正式表。 可以实现我想要的结果,但是还是不明白原语句是哪里出了问题。[/quote] 因为原语句是 UPDATE chinaepgmenunameott t1 SET t1. HOUR =.., t1.minutes =... 那就有可能null
zion_ 2016-09-02
  • 打赏
  • 举报
回复
引用 6 楼 giftsf 的回复:
检查 SELECT t.playtime - t1.playtime FROM chinaepgmenunameott t1 JOIN chinaepgmenunameott t2 ON t1.startdate=t2.startdate AND t1.sequencecode + 1 = t2.sequencecode WHERE (t.playtime - t1.playtime) IS NULL ; 更新可以用 UPDATE chinaepgmenunameott t1 JOIN chinaepgmenunameott t2 ON t1.startdate=t2.startdate AND t1.sequencecode + 1 = t2.sequencecode SET t1.hour = CAST(FLOOR((t.playtime - t1.playtime)/60) AS SIGNED, t1.minutes = MOD((t.playtime - t1.playtime),60) ;
感谢解惑,这几天上班比较忙就没有注意论坛。 select语句显示为NULL 更新语句使用可以正常运行,实在是帮了大忙。 还有就是因为我现在解决问题的办法是将SELECT语句单独拉出来建立一张临时表,再用临时表更新正式表。 可以实现我想要的结果,但是还是不明白原语句是哪里出了问题。
zion_ 2016-09-02
  • 打赏
  • 举报
回复
引用 7 楼 yupeigu 的回复:
你这种写法是通过 相关子查询来查,会导致一个问题,就是你说的有些值被置为null了,因为相关子查询 找不到对应的记录,就会返回null。 建议修改为楼上的 join的方法,这样的好处是,只有关联上的才会被更新,如果关联不上的,就不修改
谢谢解惑,问题已解决这两天比较忙就没上论坛看。 SELECT我已经拿出来单独运行时可以获得正确数值的,但是全部整句SQL运行就会将对应字段刷成NULL。 目前的解决办法是吧SELECT单独拉出来建立一张临时表,然后再将临时表和主表关联更新。 6楼的方法正在尝试,数据量比较大所以还在执行。
zion_ 2016-09-02
  • 打赏
  • 举报
回复
引用 8 楼 KanzakiOrange 的回复:
你可以先把结果select 出来对比一下,看下更新的结果在查询里面是否显示正确,如果里面包含有null值,那么经过运算肯定也是null的
谢谢解惑,问题已解决这两天比较忙就没上论坛看。 SELECT我已经拿出来单独运行时可以获得正确数值的,但是全部整句SQL运行就会将对应字段刷成NULL。 目前的解决办法是吧SELECT单独拉出来建立一张临时表,然后再将临时表和主表关联更新。 但是还是不明白为什么这么做数据就正常显示了。
  • 打赏
  • 举报
回复
你这种写法是通过 相关子查询来查,会导致一个问题,就是你说的有些值被置为null了,因为相关子查询 找不到对应的记录,就会返回null。 建议修改为楼上的 join的方法,这样的好处是,只有关联上的才会被更新,如果关联不上的,就不修改
giftsf 2016-08-30
  • 打赏
  • 举报
回复
检查 SELECT t.playtime - t1.playtime FROM chinaepgmenunameott t1 JOIN chinaepgmenunameott t2 ON t1.startdate=t2.startdate AND t1.sequencecode + 1 = t2.sequencecode WHERE (t.playtime - t1.playtime) IS NULL ; 更新可以用 UPDATE chinaepgmenunameott t1 JOIN chinaepgmenunameott t2 ON t1.startdate=t2.startdate AND t1.sequencecode + 1 = t2.sequencecode SET t1.hour = CAST(FLOOR((t.playtime - t1.playtime)/60) AS SIGNED, t1.minutes = MOD((t.playtime - t1.playtime),60) ;
Ginnnnnnnn 2016-08-30
  • 打赏
  • 举报
回复
你可以先把结果select 出来对比一下,看下更新的结果在查询里面是否显示正确,如果里面包含有null值,那么经过运算肯定也是null的
zion_ 2016-08-29
  • 打赏
  • 举报
回复
有没有大神指导一下下啊!!!!!
qq_35988150 2016-08-29
  • 打赏
  • 举报
回复
qdfddtgvfggf
zion_ 2016-08-29
  • 打赏
  • 举报
回复
引用 1 楼 KanzakiOrange 的回复:
报什么错误?
不报错误,就是会把表中hour和minutes两个字段更新成null 但是本地运行这两个字段可以得到正确数值 本地数据库和服务器对应的数据库结构都是一样的。
zion_ 2016-08-29
  • 打赏
  • 举报
回复
不报错误,就是会把表中hour和minutes两个字段更新成null 但是本地运行这两个字段可以得到正确数值 本地数据库和服务器对应的数据库结构都是一样的。
Ginnnnnnnn 2016-08-29
  • 打赏
  • 举报
回复
报什么错误?

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧