3 个表上的 LEFT OUTER JOIN。为什么这个 SQL 代码给出错误 106

LEFT OUTER JOIN on 3 tables. Why does this SQL code give error 106

为什么下面的 MySQL 查询会报错

1066 - Not unique table/alias: 'MOZ'

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

这样使用

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

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

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 

注意,在FROM子句中引用三个table GA, MOZ, SF,这样会使它们交叉连接,你会得到一个cartisian积,你必须添加一个JOIN 条件或改用 INNER JOIN 语法。

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

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

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

您还没有在 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