mysql leftjoin的怪问题

SELECT tg.id,tg.name
FROM trd_goods tg LEFT JOIN trd_goods_tag_relation tgt ON tg.id = tgt.goods_id

这是我的sql语句左边假如50条数据,右边100条数据,为一对多的关系,如果按我一直以来的理解left join以左表为基准的情况下,最后出来的数据最多只有50条,右表随机匹配一条关联上的。但是现实出现的结果是100条数据,有点想不通大神们给我科普下啊

阅读 3.3k
3 个回答

你理解的左连接是错误的,左连接是会匹配所有满足条件的数据,如果 trd_goods 中有记录在 trd_goods_tag_relation 匹配不到数据还是会产生一条记录,只不过查询中 trd_goods_tag_relation 中的字段是 null, 这就是以左边的表为主。

左连接返回的结果是 左表中所以记录+右表中连接字段相等的记录,所以说,返回结果最少是50条,而不是最多

你的理解有误!
以左连接为例:

左连接 是以左表为主,意思是:匹配所有 满足左表条件的数据。如果右表没数据,则显示左表字段,右表字段为空。显示的数据总数,最少是左表数据
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题