如何LEFT JOIN具有相同列名的两个表

时间:2011-11-14 09:28:56

标签: mysql left-join

我想LEFT JOIN两个具有相同列名的表。我有两个表,我试图加入,但我一直收到错误:

column 'id' is ambiguous

在我的JSON输出中返回。

我当前的查询:

$sQuery = "
 SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))."
 FROM   $sTable
 LEFT JOIN
    $sTable2
    ON ($sTable2.id = $sTable.id)

 $sWhere
 $sOrder
 $sLimit
";

产生该错误。当每个表中有相同的列名时,如何将这两个表连接为连接点?

3 个答案:

答案 0 :(得分:15)

明确该列属于哪个表。这也适用于查询的SELECT部分​​:

SELECT table1.column AS column1, table2.column AS column2
FROM table1
LEFT JOIN table2
ON table1.column = table2.column

为了节省一些打字时间,请使用表别名:

SELECT t1.column AS column1, t2.column AS column2
FROM table1 AS t1
LEFT JOIN table2 AS t2
ON t1.column = t2.column

答案 1 :(得分:1)

歧义可能在选择中,而不在连接中。加入看起来不错。 $ aColumns可能包含没有表名规范的“id”。

答案 2 :(得分:1)

The LEFT JOIN keyword returns all rows from the left table (table_name1), 
even if there are no matches in the right table (table_name2).

在您的情况下,table1和table2都是相同的。因此,执行Left Join可能没有任何好处,因为最终将返回所有行。你可能想使用Inner Join。