2016-08-08 15 views
0

私は2つのテーブルを持っています。Mysqlグループconcat選択された列テーブルのみ一致テーブルB

テーブルタイヤ

+------------------------------+----------------------------------------------------------------+--------+-------+------+ 
| sku       | tyrename              | width | ratio | size | 
+------------------------------+----------------------------------------------------------------+--------+-------+------+ 
| 2454019RE003(98W)   | 245/40 R19 98W BRIDGESTONE Potenza RE003      | 245.00 | 40.00 | 19 | 
| 2753519RE003(100W)XL   | 275/35 R19 100W BRIDGESTONE Potenza RE003 XL     | 275.00 | 35.00 | 19 | 
| 2454019CSC5P(98Y)XL(EU)  | 245/40 R19 98Y CONTINENTAL ContiSportContact 5P XL (EU)  | 245.00 | 40.00 | 19 | 
| 2454518CSC3(96W)(EU)   | 245/45 R18 96W CONTINENTAL ContiSportContact3 (EU)    | 245.00 | 45.00 | 18 | 
| 2454518CSC3(96Y)ESSR(EU)  | 245/45 R18 96Y CONTINENTAL ContiSportContact3 E SSR (EU)  | 245.00 | 45.00 | 18 | 
+------------------------------+----------------------------------------------------------------+--------+-------+------+ 

とテーブル車両

+------+------+---------------+-------------------------------+---------+---------+---------+---------+---------+---------+ 
| make | year | modeltrim  | options      | tyre1_1 | tyre1_2 | tyre1_3 | tyre2_1 | tyre2_2 | tyre2_3 | 
+------+------+---------------+-------------------------------+---------+---------+---------+---------+---------+---------+ 
| BMW | 2014 | 5 Series 535i | OE Fitment 01 (18")   | 245.00 | 45.00 | 18.00 | 0.00 | 0.00 | 0.00 | 
| BMW | 2014 | 5 Series 535i | OE Fitment 02 (18")   | 245.00 | 50.00 | 18.00 | 0.00 | 0.00 | 0.00 | 
| BMW | 2014 | 5 Series 535i | OE Fitment 03 (17")   | 225.00 | 55.00 | 17.00 | 0.00 | 0.00 | 0.00 | 
| BMW | 2014 | 5 Series 535i | OE Fitment 04 Staggered (19") | 245.00 | 40.00 | 19.00 | 275.00 | 35.00 | 19.00 | 
| BMW | 2014 | 5 Series 535i | Option 01 Staggered (19")  | 245.00 | 40.00 | 19.00 | 265.00 | 45.00 | 19.00 | 
+------+------+---------------+-------------------------------+---------+---------+---------+---------+---------+---------+ 

Iは、タイヤ幅、比及びサイズを使用して2台の参加、次のようなテーブルを生成するように1列にグループSKUしたいです。

+------+------+---------------+-------------------------------+-----------------------------------------------------------------+ 
| make | year | modeltrim  | options      | sku                | 
+------+------+---------------+-------------------------------+-----------------------------------------------------------------+ 
| BMW | 2014 | 5 Series 535i | OE Fitment 01 (18")   | 2454518CSC3(96W)(EU),2454518CSC3(96Y)ESSR(EU)     | 
| BMW | 2014 | 5 Series 535i | OE Fitment 04 Staggered (19") | 2454019RE003(98W),2454019CSC5P(98Y)XL(EU),2753519RE003(100W)XL | 
+------+------+---------------+-------------------------------+-------------------------------------------------+---------------+ 

2つのタイヤサイズを持ち、両方のサイズがタイヤ幅、比率サイズと一致する場合は、 1つのサイズがタイヤテーブルと一致する場合は、行を表示しないでください。

現在私は以下のSQLクエリを使用していますが、2つのタイヤサイズを持つこれらのオプションに一致するのは1つのタイヤサイズでも行を示しています。上記の例の表では、以下のクエリにはタイヤサイズ265/45/19タイヤテーブルにありませんにもかかわらず、「オプション01千鳥(19" )」の行が表示されます。

SELECT unionTable.make, unionTable.year, unionTable.modeltrim, unionTable.options, group_concat(unionTable.sku order by unionTable.sku) 
FROM 
(SELECT 
    a.make, a.modeltrim, a.year, a.options, b.sku 
FROM 
    vehicle a 
     JOIN 
    tyre b 
WHERE 
    a.tyre1_1 = b.width AND a.tyre1_2 = b.ratio 
     AND a.tyre1_3 = b.size 
UNION ALL 
SELECT 
    a.make, a.modeltrim, a.year, a.options, b.sku 
FROM 
    vehicle a 
     JOIN 
    tyre b 
WHERE 
    a.tyre2_1 = b.width AND a.tyre2_2 = b.ratio 
     AND a.tyre2_3 = b.size) AS unionTable 
group by unionTable.make, unionTable.modeltrim, unionTable.year, unionTable.options 
order by unionTable.make, unionTable.modeltrim, unionTable.year, unionTable.options, unionTable.sku 

ありがとうございます。

+1

あなたダウン議決権を行使された場合、その理由。 – Jaydee

+0

(上記、たとえば、「2」)、アラームの鐘が鳴って起動する必要がありますあなたが列を列挙している任意の時間というコメントを残してください。 – Strawberry

答えて

0

あなたが内部結合を使用でき、GROUP_CONCAT

select a.make, a.year, a.modeltrim, a.options , group_concat(b.sku) 
from vehicle as a 
inner join tyre as b on (b.tyre1_1 = a.width AND b.tyre1_2 = a.ratio 
    AND b.tyre1_3 = a.size) 
gruop by a.make, a.year, a.modeltrim, a.options 
UNION  
select a.make, a.year, a.modeltrim, a.options , group_concat(b.sku) 
from vehicle as a 
inner join tyre as b on (b.tyre2_1 = a.width AND b.tyre2_2 = a.ratio AND b.tyre2_3 = a.size)) 
gruop by a.make, a.year, a.modeltrim, a.options 
+0

お返事ありがとうございますが、あなたのお問い合わせはm最初のタイヤサイズと2つのタイヤサイズ(tyre2_1、tyre2_2、tyre2_3)のオプションを持ついくつかの車両をアーチし、これらもグループコンカットに合わせる必要があります。もう1つの問題は、2つのタイヤサイズを持つオプションの場合です.1つのサイズがタイヤテーブルの幅、比率、サイズに一致しない場合は、その行を除外する必要があります。 2つのタイヤサイズを持つこれらのオプションの場合、両方のサイズは、結果に含めるタイヤテーブルのタイヤサイズが一致する必要があります。 – Ken

+0

私は答えを更新しました – scaisEdge

+0

こんにちは、あなたの更新のおかげで。ただし、tyre1_x列とtyre2_x列の両方に値があるかどうかは確認されませんでした。これらのタイヤサイズは両方ともタイヤテーブルに一致するskuを持つ必要があり、そうでない場合はtyre1_xまたはtyre2_xと一致するだけです。 – Ken

関連する問題