私のDBスキームが次のようになっているとしましょう:
T_PRODUCT
id_product (int, primary)
two entries: (id_product =1) , (id_product =2)
T_USER
id_user (int, primary)
id_product (int, foreign key)
name_user (varchar)
two entries: (id_product=1,name_user='John') , (id_product=1,name_user='Mike')
最初のクエリを実行して、すべての製品とそのユーザー (存在する場合) を取得すると、次のようになります。
SELECT T_PRODUCT.id_product, T_USER.name_user
FROM T_PRODUCT
LEFT JOIN T_USER on T_USER.id_product = T_PRODUCT.id_product;
>>
id_product name_user
1 John
1 Mike
2 NULL
は、私にはよく見えますよ。ここで、同じことをしたい場合は、連結されたユーザー名 (ユーザーがいる場合、そうでない場合は NULL) を使用して、行ごとに 1 つの製品を持ちたい場合を除きます。
SELECT T_PRODUCT.id_product, GROUP_CONCAT(T_USER.name_user)
FROM T_PRODUCT
LEFT JOIN T_USER on T_USER.id_product = T_PRODUCT.id_product;
>>
id_product name_user
1 John,Mike
**expected output**:
id_product name_user
1 John,Mike
2 NULL
製品のユーザーがいない場合、 GROUP_CONCAT は、LEFT JOINがあっても、mysql がこの製品の行を生成するのを防ぎます。
- これは予想される MySQL の動作ですか?
- GROUP_CONCAT または別の関数を使用して期待される出力を得る方法はありますか?