2011-07-21 30 views
0

我已就該下表許多一對多:sql中關於選擇多到許多不按預期工作

table product: 
prd_cod (pk) 
cat_cod (fk) 
prd_nome 

table description_characteristic: 
prd_cod(fk) 
id_characteristic(fk) 
description 

table characteristic: 
id_characteristic(pk) 
name 

我們假設cat_cod將是1,我想展現這樣的數據:

我已經做了以下這個選擇來解決我的問題:

select p.prd_cod,p.prd_name,c.name_characteristic,dc.description 
from product p,description_characteristic dc, characteristic c 
where p.prd_cod = dc.prd_cod and 
dc.id_ccharacteristic = c.id_characteristic and 
p.cat_cod = 1 

但數據被證明是這樣的:

Prd_cod Prd_name name_characteristic descript 
    1   pen  Color   pink  
    1   Pen  manufacturer  kingston 
    1   Pen  type     brush 
    1   Pen  weight    0.020 

我想要顯示的結果是這樣的:

Prd_cod Prd_name name_characteristic descript name_characteristic descript 
    1   pen  Color   pink  type     brush 
    2   Pen-drive manufacturer  kingston weight    0.020 

我不能做一個選擇來解決這個 請我需要幫助 謝謝大家

+0

選擇適當的數據的行爲,並以某種特定的格式顯示它是兩個獨立的步驟。你的目標不應該是用SQL查詢產生輸出。像這樣定義你的問題,答案是不明確的;如果產品有1或3個相關描述而不是2個,你會怎麼做? –

回答

0
Select VALUES YOU WANT 
FROM CATEGORIES 
LEFT JOIN product ON 
product.cat_cod=CATEGORIES.cat_cod 
LEFT JOIN description_characteristic ON 
product.prd_cod = description_characteristic.prd_cod 
LEFT JOIN characteristic ON 
description_characteristic.id_characteristic=characteristic.id_characteristic 
WHERE CATEGORIES.cat_cod = "1"; 

你將需要放置tablename.column來選擇存在於多個表中的字段。

(我假設你的類別表被稱爲類別)

+0

我相信OP正在尋找一個未知數量特徵的動態支點。 –

+0

我會盡力,謝謝你及時回覆埃德加 –

0

這個查詢應該可以解決你的問題,它會在同一列....

select 
    p.prd_cod 
    , p.prd_name 
    , GROUP_CONCAT(c.name,dc.description) cd_list 
from 
    product p 
    ,description_characteristic dc 
    ,characteristic c 
where 
    p.prd_cod = dc.prd_cod and 
    dc.id_characteristic = c.id_characteristic and 
    p.cat_cod = 1