一、错误背景:
select *,o.userid as o_id from
(select * from orderinfo as o left join userinfo as u on u.userid=o.userid) t
where t.isPaid='已支付' ;
ERROR 1060 (42S21): Duplicate column name 'userid'
二、解决办法:
其实这个问题的本质是子查询:
select * from orderinfo as o left join userinfo as u on u.userid=o.userid;
中出现重复字段名,如下图:
所以,我们在查询的时候需要对字段进行重命名,如下:
select * ,o.userid as o_id, u.userid as u_id from orderinfo as o left join userinfo as u on u.userid=o.userid limit 10;
但是这样是在查询原有全部信息的同时又增加了重新命名的两列,如何在查询全部信息的同时更改其中某个字段的名称呢?
目前的解决办法是:
自己手动写出需要查询的字段的名称,如下:
select o.orderid,o.userid as o_id, o.isPaid ,o.price,o.paidTime,u.sex,u.birth,u.userid as u_id
from orderinfo as o left join userinfo as u on u.userid=o.userid limit 10;
这样似乎有些蠢笨,等发现有简单方法后再来更新。
方法更新:
如下:
select a.*,b.sex,b.birth
from orderidfo as a left join userinfo as b on a.userid=b.userid limit 10;
这个的思路是:
这样写就不用修改名称了,a.*查询字段多的表,字段少的表b直接手写
网友评论