返回不同
1、inner join只返回两个表中联结字段相等的行
2、inner join的数量小于等于左表和右表中的记录数量。
数量不同
1、left join返回包括左表中的所有记录和右表中联结字段相等的记录。
2、left join的数量以左表中的记录数量相同
记录属性不同
1、inner join不足的记录属性会被直接舍弃
2、left join不足的记录属性用NULL填充
设计两张表:
channel 频道表:有频道id、频道name等
module 模块表:模块id、模块name、channe_id。
页面展示频道时,可能会有新增了一个频道但是没有模块,此时不能用inner join 不然新增的模块查询不出来,所以用left join
select channel.* from channel left join modules on channel.id = modules.channel_idwhere page_id=1group by channel.id order by channel.new_sort asc , channel.id desc
1、page_id是指在哪个页面类型下,在频道channel表中定义,用来区分哪个页面类型
2、一个频道id可能有多个模块去关联,所以需要按照频道id进行分组
3、new_sort可以设置频道的排序显示,另外排序相同应该让频道最先创建的显示在前面。
以下这种情况新创建的频道就不会显示,并且没有模块的频道也不会显示。
select channel.* from channel inner join modules on channel.id=modules.channel_id
where page_id=1 group by channel.id order by channel.new_sort asc , channel.id desc
最后:有点疑问,频道只做显示频道相关信息,并没有用到关联的模块信息,所以感觉这样也能满足需求了。后续发现问题再更吧~
select channel.* from channelwhere page_id=1 order by channel.new_sort asc , channel.id desc
之前还遇到了个inner join 的场景,后续再补~