LEFT OUTER JOIN在3张桌子上。为什么这个SQL代码会给出错误106

时间:2015-05-19 12:07:00

标签: sql outer-join

为什么下面的MySQL查询会给出错误

  

1066 - 不唯一的表/别名:'MOZ'

SELECT *
FROM GA, MOZ, SF
LEFT OUTER JOIN MOZ ON GA.Page = MOZ.URL
LEFT OUTER JOIN SF ON GA.Page = SF.Address

4 个答案:

答案 0 :(得分:2)

错误很明显,您已经引用了表MOZ两次,为第二个表选择了另一个别名:

SELECT *
FROM GA, MOZ, SF
LEFT OUTER JOIN MOZ AS moz2 ON GA.Page = MOZ2.URL
LEFT OUTER JOIN SF          ON GA.Page = SF.Address 

请注意,以这种方式引用GA, MOZ, SF子句中的三个表FROM将使它们交叉连接,您将获得一个cartisian产品,您必须添加JOIN条件或使用而是INNER JOIN语法。

答案 1 :(得分:2)

简单规则:不要在from子句中使用逗号:

SELECT *
FROM GA LEFT OUTER JOIN
     MOZ
     ON GA.Page = MOZ.URL LEFT OUTER JOIN
     SF
     ON GA.Page = SF.Address;

您的版本在三个表之间表示完整的笛卡尔积,然后然后尝试执行left join。具体问题是表别名不明确,因为它们在from子句中定义了两次。

答案 2 :(得分:1)

像这样使用

SELECT *
FROM GA
LEFT OUTER JOIN MOZ ON GA.Page = MOZ.URL
LEFT OUTER JOIN SF ON GA.Page = SF.Address

答案 3 :(得分:0)

您不包括加入FROM条款的内容

SELECT *
FROM GA g
LEFT OUTER JOIN MOZ m ON g.Page = m.URL
LEFT OUTER JOIN SF s ON g.Page = s.Address