2011-11-14 15 views
4

同じ列名を持つ2つのテーブルをLEFT JOINしたいと思います。私は参加しようとしている2つのテーブルがありますが、エラーが発生し続けます。同じ列名を持つ2つのテーブルを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 
"; 

は、そのエラーを生成します。各テーブルに同じ列名がある場合、これら2つのテーブルを結合ポイントとしてどのように結合できますか?

答えて

14

列がどのテーブルに属しているかを明示してください。これは、クエリの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 
+0

ありがとうございました。私があなたの答えを受け入れたのは、それが最も完全だと感じたからです。 – gordyr

1

曖昧さは選択ではなく、参加するには、おそらくです。参加はOKです。 $ aColumnsにはおそらくテーブル名の指定や何もない "id"が含まれています。

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

あなたのケースでは、テーブル1とテーブル2の両方が同じです。したがって、最終的にすべての行が返されるため、左結合を行うメリットはありません。内部結合を使用したいかもしれません。

関連する問題