Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to LEFT JOIN two tables with the same column name

I want to LEFT JOIN two tables with the same column name. I have two tables which I am trying to join but I keep getting an error:

column 'id' is ambiguous

returned in my JSON output.

My current query:

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

 $sWhere
 $sOrder
 $sLimit
";

Produces that error. How can I join these two tables as the join point when there is the same column name in each table?

like image 893
gordyr Avatar asked Nov 14 '11 09:11

gordyr


3 Answers

Be explicit about which table the column belongs to. This also applies to the SELECT part of the query:

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

To save you some typing time, use table aliases:

SELECT t1.column AS column1, t2.column AS column2
FROM table1 AS t1
LEFT JOIN table2 AS t2
ON t1.column = t2.column
like image 200
knittl Avatar answered Oct 04 '22 23:10

knittl


The ambiguity is probably in the select, not in the join. The join looks OK. $aColumns probably contains "id" without table name specification or something.

like image 25
Rémi Avatar answered Oct 04 '22 22:10

Rémi


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).

In your case, both table1 and table 2 are same. So There might be no benefit of doing Left Join because ultimately all the rows will be returned. You might wanna use Inner Join.

like image 26
Zohaib Avatar answered Oct 04 '22 22:10

Zohaib