代码之家  ›  专栏  ›  技术社区  ›  powtac

SQL如何将行映射到列?

  •  1
  • powtac  · 技术社区  · 15 年前

    数据库结构 两个1-n连接。

    User table
    ==========
    user_id
    
    Attribute table
    ===============
    attribute_id
    user_id
    attribute_name
    
    Attribute_Value table
    =====================
    attribute_value_id
    attribute_id
    attribute_value
    

    有没有一种方法可以接收以下行样式的数据:

    user_id | firstname | lastname
    ---------------------------
    1       | Simon     | Smith
    2       | John      | Doe
    

    name 是第一个 attribute_name lastname 第二个。

    2 回复  |  直到 15 年前
        1
  •  1
  •   cdonner    15 年前

    select
      u.user_id,
      a1.attribute_value as firstname,
      a2.attribute_value as lastname
    from User u
    inner join Attribute a1
    on u.user_id = a1.user_id
    and a1.attribute_name = 'name'
    inner join Attribute_Value v1
    on a1.attribute_id = v1.attribute_id
    inner join Attribute a2
    on u.user_id = a2.user_id
    and a2.attribute_name = 'lastname'
    inner join Attribute_Value v2
    on a2.attribute_id = v2.attribute_id
    

    大概是这样(没有运行这个)。如果不是每个人都有名字或姓氏,请使用左连接。

        2
  •  1
  •   Shawn    15 年前

    编辑:我不确定这在mysql中是否可行,因为没有pivot命令。如果您想查看我编写的mssql查询示例,请告诉我。这是一个类似的数据模型,但是有更多的字段/连接。