2013-06-03 164 views
0

我有以下表格。我需要加入車輛選項的車輛細節。一輛車可能有多個選項,如防盜,皮革內飾etc.I嘗試左加入。但沒有得到確切的結果。如何在mysql中連接三個表?

My question:有沒有什麼辦法可以獲得只有一行,不管這些選項是有一個還是多個?意味着這些選項需要獲得數組的形式或其他東西。

**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

在此先感謝。

+0

給我們你已經嘗試過的代碼,所以我們可以嘗試修復它。 – kushyar

+0

你試過什麼查詢? – alwaysLearn

+0

see here:http://stackoverflow.com/questions/2984844/mysql-joining-three-tables-how?rq=1 –

回答

2

如果你想每輛車只返回一排,並有所有的選擇,你需要做一個GROUP_CONCAT()http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat。使用sqlfiddle數據

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 

,這將返回

enter image description here

看到這個sqlfiddle - - 這將返回一個逗號分隔陣列http://sqlfiddle.com/#!2/290c4a/9

+0

謝謝Sean !!! –

+1

沒問題,很樂意幫忙。 – Sean

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'