join查询中,加上where条件过滤join临时表

问题抛出:mysql查询问题,主表4条数据,附表2条数据,但是我要关联查询 出来

主表 有 4条数据,但是附表只有2条。

可是我的detail查询,肯定是一直关联附表的。

这时候我写法是:

mysql查询问题,主表4条数据,附表2条数据,但是我要关联查询  出来

生成的sql为:

mysql查询问题,主表4条数据,附表2条数据,但是我要关联查询  出来

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查询问题,主表4条数据,附表2条数据,但是我要关联查询  出来

mysql 原生解决

把附表的条件,放入到join 的 on 后面。
在join时候,进行条件过滤。就会保持主表的记录了。

mysql查询问题,主表4条数据,附表2条数据,但是我要关联查询  出来

映射到go中解决

调整代码位置
mysql查询问题,主表4条数据,附表2条数据,但是我要关联查询  出来

生成sql 如下

mysql查询问题,主表4条数据,附表2条数据,但是我要关联查询  出来

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 协议》,转载必须注明作者和本文链接
嗨,我是波波。曾经创业,有收获也有损失。我积累了丰富教学与编程经验,期待和你互动和进步! 公众号:上海PHP自学中心 付费知识星球:破解面试:程序员的求职导师
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
司机 @ 欣昊玉
文章
273
粉丝
339
喜欢
558
收藏
1106
排名:64
访问:12.2 万
私信
所有博文
社区赞助商