左联接3表错误#1066

时间:2018-08-24 20:40:27

标签: mysql sql

我试图离开联接3表,但收到以下错误

  

“#1066-不是唯一的表/别名:“ uid””

我尝试了一些在网上找到的建议,例如使用别名tbl_add_unit.uid AS UnitUID,但这没用。

我的代码是:

SELECT tbl_add_unit.uid, tbl_add_rent.r_unit_no, tbl_add_electricity_bill.unit_no
FROM tbl_add_unit, tbl_add_rent, tbl_add_electricity_bill
LEFT JOIN tbl_add_unit.uid ON tbl_add_rent.r_unit_no
LEFT JOIN tbl_add_unit.uid ON tbl_add_electricity_bill.unit_no;

4 个答案:

答案 0 :(得分:2)

放弃联接操作的老式逗号语法。这些逗号等同于JOIN关键字。通常,在ON子句中指定了用于匹配表的条件。

好像我们在结果集之后,就得到了类似这样的查询将返回的结果:

 SELECT u.uid
      , r.r_unit_no
      , b.unit_no
   FROM tbl_add_unit u
   LEFT
   JOIN tbl_add_rent r
     ON r.r_unit_no = u.uid
   LEFT
   JOIN tbl_add_electricity_bill b
     ON b.unit_no = u.uid
  WHERE ...
  ORDER
     BY ...

问什么?

答案 1 :(得分:1)

您接近了,让我们瞄准更类似于:

SELECT tbl_add_unit.uid, tbl_add_rent.r_unit_no, tbl_add_electricity_bill.unit_no
FROM tbl_add_unit
LEFT JOIN tbl_add_rent ON tbl_add_unit.uid = tbl_add_rent.r_unit_no
LEFT JOIN tbl_add_electricity_bill ON tbl_add_unit.uid = 
tbl_add_electricity_bill.unit_no;

假定联接中的内容为真,因此:tbl_add_unit.uid = tbl_add_rent.r_unit_no和tbl_add_unit.uid = tbl_add_electricity_bill.unit_no。如果是这样,那你就走了。

答案 2 :(得分:0)

联接的一般语法应类似于...

SELECT some stuff
FROM table1
JOIN table2 ON table1.blahA = table2.blahB
JOIN table3 ON table2.blahC = table3.blahD
;

LEFT JOIN保留联接左侧的数据,即使右侧没有匹配项,INNER JOIN仅保留联接的数据。

答案 3 :(得分:0)

在您的查询中,看起来您有用逗号分隔的表。我假设您只是想加入这些表来获取信息。您可以只使用JOIN语句并为每个表指定别名。

SELECT 
   tblAddUnit.uid, tblAddRent.r_unit_no, tblAddElectricityBill.unit_no
FROM 
   tbl_add_unit tblAddUnit 
LEFT JOIN 
   tbl_add_rent tblAddRent ON
   tblAddUnit.uid ON tblAddRent.r_unit_no
LEFT JOIN 
   tbl_add_electricity_bill tblAddElectricityBill ON 
   tblAddElectricityBill.unit_no = tblAddUnit.uid;