| id | fid | date | 
|---|---|---|
| 1 | a | 2020-12-10 | 
| 2 | a | 2020-12-30 | 
| 3 | b | 2020-12-15 | 
求教下,我写多表联查的时候,子表想要 date 小于当前日期,fid 相同的都不要( date<2020-12-25, 所有 fid=a 都不要),这种怎么写,想了好久写不出也查不到。 实在不行我就入库的时候算出最大日期存入主表了。(而且多表查询还要分页)
|      1l00t      2020-12-25 13:25:25 +08:00 先把需求想清楚说明白……  多表联查,表呢?要查什么?关联条件是什么? | 
|  |      2sytnishizuiai OP @l00t 抱歉,因为表比较多,想先问问如果单表发生这种情况该怎么办。刚才用 MAX 可以了,但是多表查越写越复杂,之前就已经 3 表查了,现在要 4 表了。 所以准备拆开查,反正性能没什么要求,后台用。 | 
|      3berg223      2020-12-25 13:42:41 +08:00 第一步:select count(*),fid from <table> where date < 2020-12-25 group by fid 第二步:结果集中过滤掉 count(*) > 1 的行即可。实现这一步有两种选择方式:1.在业务代码中实现; 2.继续用 sql 实现,写完不要忘记用 explain 看一下可不可以走索引。 | 
|  |      4sytnishizuiai OP @berg223 嗯,和我用 max 找出每组 fid 最大的 date 效果一样,不过会造成 4 表查询,准备不走这条路了,要么入库的时候把最大的 date 存入主表,这样简化查询,要么就重新写这块的多表查询。 谢谢。 | 
|  |      5hanbin      2020-12-25 14:08:40 +08:00 | 
|  |      7keepeye      2020-12-25 14:15:57 +08:00 子查询不能用 group by 吗? select a.*, b.* from a inner join (select fid, count(*) as c from b where `date` < '当前日期' group by fid having c = 1) as b WHERE 其他条件.. | 
|  |      8sytnishizuiai OP @keepeye 嗯,我刚才测试 max group by 把数据筛选后再联结查,不过就 4 个表联查了,我准备这个表单独写个查,然后数据合并筛选,这样方便点。 | 
|  |      9sytnishizuiai OP 这功能刚才讨论后不做了。。。太棒了。。。 |