同事遇到mysql查询问题:

1
2
3
  select count(0) from (
	 select *, b.id as bid, c.id as cid from table_a a, left join table_b b on b.a_id = a.id
  )

左连接查询多张表后获取查询记录条数。 sql运行报错:Duplicate column name 'id'.

原因

根据错误信息,可以看出:查询记录条数的时候,有两列名称都为 'id'。 只执行里面的左连接查询

1
select *, b.id as bid, c.id as cid from table_a a, left join table_b b on b.a_id = a.id

可以看到查询结果中确实有多个列名为'id', 把 'select ' 改为 'select a.'即可。

引申疑问

我对'count(0)'的实现细节不是很清楚,于是我在网上搜索了一下

总结

  1. 表无任何索引,则执行全表扫描。

  2. 表有主键,则使用主键进行扫描。

  3. 表有二级索引,则使用二级索引进行扫描。

  4. 表有多个二级索引,则使用key_len小的二级索引进行扫描。

参考资料