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

このクエリは正常に動作します。しかし、問題は、製品テーブルとカテゴリテーブルの両方に "name"と "id"という名前のフィールドがあることです。だから私はこのクエリの結果をフェッチするとき、それは私にただ1つの名前と1つのIDを与えますが、私は両方のIDと名前が欲しいです。MySQL:別のテーブルに同じ名前の結合とカラムを残しましたか?

フィールドの名前を変更せずにこれを行うにはどうすればよいですか? product_nameやcategory_nameなどのカスタム名で返すことはできますか?

答えて

2

のようにキーワード "AS" あなたはASキーワードで

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

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が1つしかありません – user1091856

+0

残念ですが、*値を残しておけば、fetch_rowでアクセスする必要があります。それ以外の場合は、他の投稿に記載されている重複フィールドごとに別名を使用します。 – gunnx

2

使用エイリアスエイリアスフィールドを与えることができます使用します。

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

私は、Node.jsプロジェクトでMySQLを操作するのと同様の問題がありました。

私はあなたはまだ、すべての列を一覧表示し、エイリアスを使用する代わりに、次の作品をselect *を使用する場合ことがわかった。つまり

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

、単に矛盾している結合列のエイリアスを作成します名前。他の列やテーブル名にエイリアスは必要ありません。

関連する問題