2012-05-10 2 views
2
SELECT * FROM `product` left join category on product.category_id = category.id 

Этот запрос работает нормально. Но проблема заключается в том, что как таблица продуктов, так и таблица категорий имеют поля с именем «имя» и «идентификатор». Поэтому, когда я получаю результат этого запроса, он дает мне только одно имя и один идентификатор, но мне нужны как идентификаторы, так и имена.MySQL: Left join и столбец с тем же именем в разных таблицах?

Как я могу это сделать без необходимости переименовывать поля? Можно ли возвращать пользовательские имена, такие как product_name и category_name?

ответ

2

вы можете дать поля псевдонимами

SELECT a.id, a.name, a.category_id, b.id AS catId, b.name AS catName 
FROM product AS a left join category AS b on a.category_id = b.category.id 
5

использовать "AS" ключевое слово, как

SELECT product.id AS pid, category.id AS cid ... FROM `product` left join category on product.category_id = category.id 
3
SELECT p.*,c.* FROM product p LEFT JOIN category c on p.category_id = c.id; 
+0

Это будет работать. Вы * можете * использовать псевдонимы, как говорят другие, но вам это не нужно. – Ilion

+0

Это не будет работать в PHP. Когда я беру строки (mysql_fetch_assoc), появляется только одно имя и ONE id – user1091856

+0

Извините, вам нужно будет получить доступ через fetch_row, если вы оставите значение *. В противном случае он будет использовать псевдоним для каждого дублирующего поля, как указано в других сообщениях. – gunnx

2

использовать псевдонимы с AS ключевым словом:

SELECT p.id AS product_id, p.name AS product_name, c.id AS cat_id, c.name AS cat_name 
FROM `product` AS p 
LEFT JOIN category AS c ON p.category_id = c.id 
2

попробовать это :

SELECT product.id AS productid, 
     category.id AS categoryid, ... 
FROM `product` left join category 
     on product.category_id = category.id 
0

У меня была аналогичная проблема с MySQL в проекте Node.js.

Я обнаружил, что если вы все еще хотите использовать select * вместо перечисления всех столбцов и используя псевдоним, следующие работы:

SELECT *, category.id AS cId, category.name AS cName 
FROM product LEFT JOIN category ON product.category_id = category.id 

Других слова, просто создать псевдонимы для соединяемых столбцов, которые имеют противоречивые имена. Вам не нужны псевдонимы в других столбцах или именах таблиц.

Смежные вопросы