2014-10-30 52 views
0

我没有搜索/解释此查询的单词,所以我在此处询问。所以我有表A,它存储了使用user_id的用户的几条记录。我想返回定义用户是否具有其中一个颜色值的行。MySql检查是否存在值,然后将它们作为不同的列返回

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 

所以基本上我试图做到的是弄清楚所有的color列在表A中的不同的值,然后选择该值每user_id是具有和每用户一行显示。我遇到的问题是在不知道color列中的值是什么的情况下一次性完成此操作。

回答

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

+0

不,我是不是在我原来的问题不够清楚。我需要在不知道不同值的情况下执行此操作,而且我只检查user_id是否作为单个记录(EXISTS)的一个返回的消毒代码 – user2686172 2014-10-30 16:17:55

+0

@ user2686172您有多少个不同的颜色? – Mihai 2014-10-30 16:20:10

+0

这是现在的问题,如果可以的话,我想在MySQL中使它动态化。如果没有,我将不得不在我的程序中使用单独运行的查询来解决这个问题。 – user2686172 2014-10-30 16:22:28

相关问题