遇到mysql里面的一个问题 欢迎探讨一下

活不明白· 发布于 2017/12/27 15:44
阅读 205
收藏 1

SELECT  a.* FROM  table1 a
WHERE a.id IN (
    SELECT  b.tid FROM table2 b
    WHERE getBJDate(c.CreatedDate, '1') = DATE_SUB(CURDATE(), INTERVAL 1 DAY)
)

以上sql 两张表 table2中有 table1的外键 tid 而且在table1中是唯一主键

getBJDate() 是自定义函数

需求就是查找 table2中创建时间是前一天的数据

问题来了

如果在子句中用到 getBJDate()函数 那这个 a.id in ..条件一点用都没有 也就是查询的是table1里全表的数据 把 getBJDate() 换成其他条件就正常

其实子句中只能查出一条数据 

所以很奇怪 这是mysql的什么特性吗 还是BUG? 有没有遇到同样问题的?

加载中
0
逛街户man
逛街户man

a.id和b.tid联合查询

逛街户man
逛街户man
@活不明白· 回复@活不明白· : 我印象中in是不走索引的
活不明白·
活不明白·
其实我已经改了其他方法 现在只是对这个情况感到奇怪 有点颠覆认知而已
0
你好--明天
你好--明天

阿里开发手册中明确禁用外键

老菜鸟0217
老菜鸟0217
禁用外键,是指不通过关键字foreign key显示使用
活不明白·
活不明白·
没有设置外键 只是存了table1的主键字段 有必要这么断章取意吗 怎么没关注我说的问题?
0
开源中国首席罗纳尔多
开源中国首席罗纳尔多

为什么5.6写的语法放到最新版会报错?

0
phn555
phn555

这个我知道,在《高性能Mysql》3版中提到了,这样做的目的是提高查询性能,叫什么延迟缓存的

活不明白·
活不明白·
能不能稍微详细一点?
0
phn555
phn555

给你,哈哈

返回顶部
顶部