0

結合したい 4 つのテーブルがありますが、2 つの特定のレコードを group_concat したいテーブルが 1 つあります。

Product_to_category PC
P_ID C_ID
1 1
2 2
2 3
1 3


製品 P
P_ID P_PRICE
1 12
2 3
3 4

Product_Description PD
P_ID Language_id PD_Name
1 1 チップ
1 2 チップ (別の言語で)
2 1 ソーダ
2 2 ソーダ (別の言語で)

Category Description CD
C_ID   Language_id  CD_Name
1      1            Junk Food
1      2            Junk Food (In a different language)
2      1            Drinks
2      2            Drinks (In a different language)
3      1            Imported
3      2            Imported (In a different language)


Product_attribute PA
P_ID  A_ID  Language_ID  A_TEXT
1     1      1            Brand A
1     2      1            300g
1     3      1            Ketchup
1     1      2            Brand A
1     2      2            300g 
1     3      2            Ketchup (Different language)
2     1      1            Brand B
2     2      1            500mL
2     3      1            Cherry
2     1      2            Brand B
2     2      2            500mL
2     3      2            Cherry (Different language)

What I want to do is below:

P.P_ID |  P.P_PRICE | PD.LANGUAGE_ID | PD.PD_NAME | CD.C_ID | CD.CD_NAME | Attribute
------------------------------------------------------------------------------------
  1    |  12        |   1            | Chips      |  1      | Junk Food | Brand A 300g
  1    |  12        |   2            | Chips      |  1      | Junk Food | Brand A 300g
  2    |  3         |   1            | Soda       |  2      | Drinks    | Brand B 500mL
  2    |  3         |   2            | Soda       |  2      | Drinks    | Brand B 500mL
  2    |  3         |   1            | Soda       |  3      | Imported  | Brand B 500mL
  2    |  3         |   2            | Soda       |  3      | Imported  | Brand B 500mL
  1    |  12        |   1            | Chips      |  3      | Imported  | Brand A 300g
  1    |  12        |   2            | Chips      |  3      | Imported  | Brand A 300g

基本的に、カテゴリと属性を使用して製品をロードしようとしています。Product_attribute PA なしでテーブルを結合したままにしておくだけで正常に機能しています。属性をまとめる方法がわかりません。以下は私のコードです:

select P.P_ID, P.P_PRICE, PD.LANGUAGE_ID, PD.PD_Name, CD.C_ID, CD.CD_NAME, 
(select group_concat(PA.A_TEXT) from PA where (PA.A_ID=1 or PA.A_ID=2) and PA.P_ID =
P.P_ID group by PA.P_ID) as attribute from PC left join PD on PC.P_ID = PD.P_ID
left join CD on PC.C_ID = CD.C_ID
left join P on P.P_ID = PC.P_ID
where PD.language_id = CD.language_id and (PD.language_id=1 or PD.language_id=2)

これが少し紛らわしい場合は申し訳ありません

2013 年 4 月 26 日更新
ここで、テーブルの内容と達成したいことの要約を示します。 Product_to_category PC テーブルは、製品をカテゴリにリンクし、カテゴリを製品にリンクします。製品は複数のカテゴリに属する​​ことができ、カテゴリは複数の製品に属することができます。P テーブルの製品には価格などの製品値があり、その説明は product_description PD テーブルにあります。製品には、2 行の製品説明 (バイリンガル) を含めることができます。製品には、ブランド (「ブランド A」、「ブランド B」) や容量/重量 (「300g」、「500ml」) など、product_attribute PA テーブルにも属性値があります。製品は複数のカテゴリに属し、カテゴリには複数の製品が含まれる場合があります。各カテゴリには 2 つの説明があります (バイリンガル)。

さらに説明が必要な場合はお知らせください。

4

1 に答える 1

2
select P.P_ID, P.P_PRICE, PD.LANGUAGE_ID, PD.PD_Name, CD.C_ID, CD.CD_NAME, 
group_concat(DISTINCT PA.A_TEXT) as attribute
from PC left join PD on PC.P_ID = PD.P_ID
left join CD on PC.C_ID = CD.C_ID
left join P on P.P_ID = PC.P_ID
left join PA on PA.P_ID = P.P_ID AND (PA.A_ID=1 or PA.A_ID=2)
where PD.language_id = CD.language_id and (PD.language_id=1 or PD.language_id=2)
GROUP BY P.P_ID, PD.LANGUAGE_ID

フィドル

于 2013-04-25T18:37:05.403 に答える