2011-07-21 28 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