【问题标题】:Mysql many to many join [duplicate]Mysql多对多连接[重复]
【发布时间】:2018-02-08 23:06:24
【问题描述】:

我有 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

提前感谢您的帮助!

【问题讨论】:

  • 加入表格,然后旋转结果以获取列中的属性。
  • @bwrabbit 你有没有做过一些研究????网上有很多例子。提问前先研究!!!
  • @Eric 我真的不知道去哪里找,所以如果你有什么有用的话,建议一些要搜索的东西而不是沮丧地扔掉多余的标点符号会很有帮助。我已经尝试过了,但我无处可去。将根据 Barmars 的评论调查数据透视表。

标签: mysql


【解决方案1】:

试试这个

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2012-12-20
    • 2016-11-01
    • 2011-07-06
    • 1970-01-01
    相关资源
    最近更新 更多