我有一个用户表和一个订单表以及一个城市名称表,即cities_translation。在用户表中,我有用户ID,名字,姓氏,城市ID和代表ID。该代表只是同一个表中的另一个用户。我想要做的是加入这些表来获得这样的表
user id first name last name city name representative wholesaler
1 foo bar city1 2 yes
2 user user city2 0 no
预期结果是
user id first name last name order id city name representative
1 foo bar 1 city1 user
查询:
Select
orders.id, orders.user_id, orders.total, orders.final_total, orders.order_status_id,
orders.unix_time, u.id,u.email, u.first_name, u.last_name,m.first_name as rep_firstname,
m.last_name as rep_lastname, u.representative_id,u.city_id,cities_translation.*
From orders,cities_translation,users u
left join cities_translation
Where u.city_id = cities_translation.city_id
And orders.user_id = u.id
And cities_translation.lang_id='2'
And orders.order_status_id='1'
Left join users r on u.representative_id = r.id
Group by orders.user_id
Limit 5
但结果是:“#1066 - 不唯一的表/别名:'cities_translation'”那么如何重写此查询以避免此错误并获得每个批发商的代表名称
答案 0 :(得分:2)
您正在混合显式和隐含联接
From orders,cities_translation,users u
left join cities_translation
你应该采用正确的明确的连接格式..
无论如何,错误消息与您使用两次表格cities_translation
(在左边和左边的连接中)的十个事实相关
如果你需要这个表两次你应该使用适当的别名来引用表的每个单一的istance,并使用正确的别名作为相关列名的前缀
From orders,cities_translation as a ,users u
left join cities_translation as b
答案 1 :(得分:1)
如错误所示,您必须为正在连接两次的表创建一个唯一的别名。
Select
orders.id, orders.user_id, orders.total, orders.final_total, orders.order_status_id,
orders.unix_time, u.id,u.email, u.first_name, u.last_name,m.first_name as rep_firstname,
m.last_name as rep_lastname, u.representative_id,u.city_id,cities_translation.*
From orders,cities_translation ct1,users u
left join cities_translation ct2
ON u.city_id = ct1.city_id /** you probably wanted ON here INSTEAD OF WHEN*/
And orders.user_id = u.id
And ct2.lang_id='2'
And orders.order_status_id='1'
Left join users r on u.representative_id = r.id
Group by orders.user_id
Limit 5
注意根据需要更改ct1和ct2。
旁注: 习惯上以小写形式编写SQL保留字和以小写形式写列表名 您正在混合显式和隐式连接。当您稍后阅读代码时,这总会导致混淆。尽可能尝试使用表达联接 这种形式的GROUP BY不适用于mysql 5.7 +