0

我有三张桌子;

用户

   id     first_name     last_name     country 
   2      John           Doe           USA
   3      Jimmy          Biglips       FRA

user_meta(元数据)表

user_id   meta_key       meta_value
   2      phone          3333
   2      rating         Good
   3      phone          7777
   3      rating         Bad

国家

country_id     country     country_fullname
    1          USA         United States of America
    2          FRA         France

我需要通过“评分”(例如“”)进行查询并将结果集返回为;

id  first_name    last_name     phone     rating    country     country_fullname 
2   John          Doe           33333     Good      USA         United States of America

因为user_meta表有多行对应于用户表中的一个成员,所以我无法在一行中返回一组组合值。

谢谢你。

4

2 回答 2

2

尝试

SELECT u.id,
       u.first_name,
       u.last_name,
       MIN(CASE WHEN meta_key = 'phone' THEN meta_value END) phone,
       MIN(CASE WHEN meta_key = 'rating' THEN meta_value END) rating,
       u.country,
       c.country_fullname
  FROM user u LEFT JOIN user_meta m 
    ON u.id = m.user_id LEFT JOIN country c
    ON u.country = c.country
 GROUP BY u.id

输出:

| 身份证 | FIRST_NAME | LAST_NAME | 电话 | 评级 | 国家 | 国家全名 |
-------------------------------------------------- ----------------------------------
| 2 | 约翰 | 能源部 | 第3333章 好 | 美国 | 美利坚合众国 |
| 3 | 吉米 | 大唇 | 7777 | 坏| 法国 | 法国 |

这是SQLFiddle演示

于 2013-08-05T09:26:39.497 回答
2

您可以将它们组合在一个JOIN. 即使用户没有可用的电话/评级,LEFT JOINs 也允许显示该行;

SELECT u.id, u.first_name, u.last_name, p.meta_value phone, r.meta_value rating,
       u.country, c.country_fullname
FROM user u
LEFT JOIN user_meta p ON u.id=p.user_id AND p.meta_key='phone'
LEFT JOIN user_meta r ON u.id=r.user_id AND r.meta_key='rating'
JOIN country c ON u.country=c.country;

一个用于测试的 SQLfiddle

于 2013-08-05T09:27:10.997 回答