0

次の表があります。車両の詳細を車両オプションに結合する必要があります。1 つの車両には盗難防止、レザー インテリアなどの複数のオプションがある場合があります。左側の結合を試みましたが、正確な結果が得られませんでした。

My question: オプションが 1 つでも複数でも、1 行だけを取得する方法はありますか?これは、オプションが配列または何かの形式を取得する必要があることを意味します。

**vehicle_det**

vdId | Mileage | Transmission | IntColour | selCategory | price | selDriveTrain | Fuel  
--------------------------------------------------------------------------------------


**vehicle_option_trans**

id | vehicleId | optionId
------------------------


**vehicle_options**

id | type
---------

クエリ スキーマ -

CREATE TABLE vehicle_det 
    (
     vdId  int auto_increment primary key, 
     Mileage  varchar(20), 
     Transmission  varchar(30)
    );

INSERT INTO vehicle_det
(Mileage, Transmission)
VALUES
('10', 'automatic'),
('12', 'automatic'),
('5', 'manual'),
('11', 'manual');  


CREATE TABLE vehicle_option_trans 
    (
     id  int auto_increment primary key, 
     vehicleId  varchar(20), 
     optionId  varchar(30)
    );

INSERT INTO vehicle_option_trans
(vehicleId, optionId)
VALUES
('1', '1'),
('1', '3'),
('1', '4'),
('2', '2');   


CREATE TABLE vehicle_options 
    (
     id  int auto_increment primary key, 
     type  varchar(20)    );

INSERT INTO vehicle_options
(type)
VALUES
('Power Roof'),
('Sun Roof'),
('Heated Mirrors'),
('Alloy Wheels');

SQLFIDDLE

前もって感謝します。

4

2 に答える 2

2

車両ごとに 1 つの行のみを返し、そのすべてのオプションを返したい場合は、http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-連結。これはカンマ区切りの配列を返します -GROUP_CONCAT()

SELECT
    vehicle_det.*, GROUP_CONCAT(vehicle_options.type) as options
FROM 
    vehicle_det  
LEFT JOIN 
    vehicle_option_trans 
ON
    vehicle_det.vdId = vehicle_option_trans.vehicleId 
LEFT JOIN
    vehicle_options 
ON
    vehicle_options.id = vehicle_option_trans.optionId
GROUP BY vehicle_det.vdId

あなたのsqlfiddleデータを使用すると、これが返されます

ここに画像の説明を入力

このsqlfiddleを参照してください - http://sqlfiddle.com/#!2/290c4a/9

于 2013-06-03T04:54:40.490 に答える
0

これを試して

select veh.*,group_concat(opt.type) as type from vehicle_det as veh
left join vehicle_option_trans as trans on
trans.vehicleId = veh.vdID left join vehicle_options
as opt on opt.id= trans.optionId where veh.vdID = '1'
于 2013-06-03T05:13:28.827 に答える