MySql检查是存在的值然后将它们作为不同的列返回

时间:2014-10-30 16:03:40

标签: mysql subquery exists

我没有搜索/解释此查询的话,所以我在这里问。所以我有表A,它使用user_id为用户存储了几条记录。我想返回定义用户是否存在其中一个颜色值的行。

Table A 
id | user_id | color
1  | 34      | red 
2  | 34      | blue
3  | 50      | red
4  | 34      | green
5  | 77      | red
6  | 8       | red
7  | 77      | green

我希望根据上表返回。 1是记录存在而0表示不存在。

user_id | red | blue | green
34      |1    | 1    | 1
50      |1    | 0    | 0
77      |1    | 0    | 1
8       |1    | 0    | 0

基本上我想要完成的是找出表{A} color列中的所有不同值,然后选择每个user_id具有哪些值,并在每个用户的一行中显示它。我遇到的问题是一次性完成此操作而事先不知道color列中的值是什么。

1 个答案:

答案 0 :(得分:0)

这称为枢轴

SET SESSION group_concat_max_len = 1000000;

SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(CASE WHEN color= ''',
      color,
      ''' THEN 1 ELSE 0 END) AS ',
      color
    )
   )INTO @sql
FROM  
tableA;



SET @sql=CONCAT('SELECT user_id,',@sql,' FROM
tableA GROUP BY user_Id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

FIDDLE