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

一个表需要来自不同行/元组的多个值

  •  3
  • JeroenEijkhof  · 技术社区  · 16 年前

    我有这样的桌子:

    'profile_values'
    userID | fid     | value  
    -------+---------+-------
    1      | 3       | joe@gmail.com
    1      | 45      | 203-234-2345
    3      | 3       | jane@gmail.com
    1      | 45      | 123-456-7890
    

    'users'
    userID | name       
    -------+-------
    1      | joe      
    2      | jane     
    3      | jake    
    

    我想把它们连接起来,有一行有两个值,比如:

    'profile_values'
    userID | name  | email          | phone
    -------+-------+----------------+--------------
    1      | joe   | joe@gmail.com  | 203-234-2345
    2      | jane  | jane@gmail.com | 123-456-7890
    

    SELECT u.userID AS memberid,
           u.name AS first_name, 
           pv1.value AS fname,
           pv2.value as lname
    FROM  users AS u,
          profile_values AS pv1, 
          profile_values AS pv2,
    WHERE u.userID = pv1.userID
      AND pv1.fid = 3
      AND u.userID = pv2.userID
      AND pv2.fid = 45;
    

    谢谢你的帮助!

    2 回复  |  直到 16 年前
        1
  •  5
  •   OMG Ponies    16 年前

    这是一个典型的pivot查询:

      SELECT u.userid,
             u.name,
             MAX(CASE WHEN pv.fid = 3 THEN pv.value ELSE NULL END) AS email,
             MAX(CASE WHEN pv.fid = 45 THEN pv.value ELSE NULL END) AS phone,
        FROM USERS u
        JOIN PROFILE_VALUES pv ON pv.userid = u.userid
    GROUP BY u.userid, u.name
    

    如果您想查看在“JOIN”之前没有任何条目的用户,请在“JOIN”之前添加“LEFT” PROFILE_VALUES 桌子。

        2
  •  0
  •   JeroenEijkhof    16 年前

    我没有说这个,我应该有(@OMG Ponies),但我想在MySQL视图中使用这个。对于可编辑的视图,不允许使用聚合函数和 other constraints . 所以我要做的是使用和我在第一个问题中描述的相同的SQL查询。

    希望这能帮助一些人,为创建视图添加标签。