mysql的in子查询中有sysdate,导致查询结果不正确

ccuuiiccaann 2020-02-13 12:11:25
sql如下:
select card_no from table_a where card_no in(select card_no from table_b where end_date>sysdate() and customer_id='1' )
其中子查询select card_no from table_b where end_date>sysdate() and customer_id='1'查出来的结果集是"a,b"
但整个sql查出来的结果集却是“a,b,c”。
把sysdate()换成now()后就没问题了。
...全文
266 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赛星大白鹅 2020-09-29
  • 打赏
  • 举报
回复
引用 2 楼 丰耳 的回复:
执行下下边这个语句,你可能会有答案:
SELECT NOW(),SYSDATE(),SLEEP(2),NOW(),SYSDATE()

这个早就看到过了 跟着没关系 我用结束时间跟当前时间相减,判断是否相差超过几个月 来判断是否过期 把查询结果作为子查询,再去筛选主表数据 这几秒根本忽略不计
但是用sysdate()在这个子查询中 就不起作用 改成now()就可以了
        select *
from ERP_EMPLOYEE emp
where emp.DELETE_FLAG = '0'
and emp.emp_id in
( select DISTINCT emp_id from ERP_CERTIFICATE
where cert_end_date IS NOT NULL and cert_end_date != ''
and TIMESTAMPDIFF(MONTH,now(),cert_end_date) < 6
and DELETE_FLAG = '0')
order by (emp.EMP_ID + 0),CONVERT(emp.EMP_NAME USING GBK)NG GBK)
丰耳 2020-09-27
  • 打赏
  • 举报
回复
执行下下边这个语句,你可能会有答案:
SELECT NOW(),SYSDATE(),SLEEP(2),NOW(),SYSDATE()
赛星大白鹅 2020-09-27
  • 打赏
  • 举报
回复
我也遇到了相似的问题 但实在想不通为啥啊

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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