join查询中,加上where条件过滤join临时表
问题抛出:mysql查询问题,主表4条数据,附表2条数据,但是我要关联查询 出来
主表 有 4条数据,但是附表只有2条。
可是我的detail查询,肯定是一直关联附表的。
这时候我写法是:
生成的sql为:
SELECT
t_cycle.*,
t_cycle_group.cycle_group_name,
t_cycle_display.is_display
FROM
`t_cycle`
LEFT JOIN t_cycle_group ON t_cycle_group.cycle_group_id = t_cycle.cycle_group_id
LEFT JOIN t_cycle_display ON t_cycle_display.cycle_id = t_cycle.cycle_id
WHERE
`t_cycle`.`deleted_at` IS NULL
AND ( ( t_cycle_group.project_id = t_cycle.project_id )
AND ( ( t_cycle_display.project_plan_id = 3 ) AND ( t_cycle.cycle_id = 18 ) )
LIMIT 1
执行后,查询不到不在附表对应的 2条记录
mysql 原生解决
把附表的条件,放入到join 的 on 后面。
在join时候,进行条件过滤。就会保持主表的记录了。
映射到go中解决
调整代码位置
生成sql 如下
SELECT
t_cycle.*,
t_cycle_group.cycle_group_name,
t_cycle_display.is_display
FROM
`t_cycle`
LEFT JOIN t_cycle_group ON t_cycle_group.cycle_group_id = t_cycle.cycle_group_id
AND t_cycle_group.project_id = t_cycle.project_id
LEFT JOIN t_cycle_display ON t_cycle_display.cycle_id = t_cycle.cycle_id
WHERE
`t_cycle`.`deleted_at` IS NULL
AND ( ( t_cycle_display.project_plan_id = 3 ) AND ( t_cycle.cycle_id = 18 ) )
LIMIT 1
记录mysql的小技巧了,感谢老高,我亲爱的同事
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: