Как оставить две таблицы с одинаковым именем столбца - PullRequest
5 голосов
/ 14 ноября 2011

Я хочу оставить две таблицы с одинаковым именем столбца. У меня есть две таблицы, к которым я пытаюсь присоединиться, но получаю сообщение об ошибке:

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 ]

15 голосов
/ 14 ноября 2011

Укажите, к какой таблице принадлежит столбец. Это также относится к части запроса 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 голос
/ 14 ноября 2011
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 совпадают. Таким образом, выполнение левого соединения может быть бесполезным, поскольку в конечном итоге будут возвращены все строки. Возможно, вы захотите использовать Inner Join.

1 голос
/ 14 ноября 2011

Неоднозначность, вероятно, связана с выбором, а не с объединением.Соединение выглядит нормально.$ aColumns, вероятно, содержит "id" без указания имени таблицы или чего-то еще.

...