Mysql多对多加入

时间:2018-02-08 23:06:24

标签: mysql

我有3个表:device,device_properties和property。 device_properties表实现了设备和属性表之间的多对多关系。

在下面的示例数据中,名为ABC-2的设备只有3个属性,但ABC-1有4个属性(如device_properties表中所述):

device         device_properties          property    

id  name       device_id property_id      id   name   value
1   ABC-1       1        1                1    height  20cm
2   ABC-2       1        3                2    height  30cm
                1        4                3    weight  100g
                1        5                4    colour  black
                2        2                5    width   5cm
                2        3                6    width   10cm
                2        6

如果某些设备缺少某些属性(ABC-2在此示例中缺少颜色),我如何以下列格式从表中检索所有结果?

deviceId  deviceName deviceHeight deviceWeight deviceColour deviceWidth
1         ABC-1      20cm         100g         black        5cm
2         ABC-2      30cm         100g         ----         10cm

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

试试这个

select
  d.id deviceId,
  d.name deviceName,
  case when p.name='height' then p.value else null end deviceHeight,
  case when p.name='weight' then p.value else null end deviceWeight,
  case when p.name='colour' then p.value else null end deviceColour,
  case when p.name='width' then p.value else null end deviceWidth
from
  device d
  join device_properties dp on dp.device_id=d.id
  join porperty p on p.id=dp.property_id