10

検討:

SELECT * FROM `product` left join category on product.category_id = category.id

このクエリは正常に機能します。しかし問題は、product テーブルと category テーブルの両方に「name」と「id」という名前のフィールドがあることです。したがって、このクエリの結果を取得すると、1 つの名前と 1 つの ID しか得られませんが、ID と名前の両方が必要です。

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

4

6 に答える 6

9

フィールドにエイリアスを追加できます。

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
于 2012-05-10T08:33:45.063 に答える
6

次のように「AS」キーワードを使用します。

SELECT product.id AS pid, category.id AS cid ... FROM `product` left join category on product.category_id = category.id
于 2012-05-10T08:33:17.113 に答える
4

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
于 2012-05-10T08:33:55.223 に答える
2

これを試して:

SELECT product.id AS productid, 
       category.id AS categoryid, ...
FROM `product` left join category 
       on product.category_id = category.id
于 2012-05-10T08:34:58.760 に答える
2

Node.js プロジェクトで MySQL を使用すると、同様の問題が発生しました。

select *すべての列をリストしてエイリアスを使用する代わりに、引き続き使用したい場合は、次のように機能することがわかりました。

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

つまり、競合する名前を持つ結合された列のエイリアスを作成するだけです。他の列やテーブル名にエイリアスは必要ありません。

于 2016-09-26T18:22:17.993 に答える
2
SELECT p.*,c.* FROM product p LEFT JOIN category c on p.category_id = c.id;
于 2012-05-10T08:33:54.780 に答える