MySql 检查值是不是存在,然后将它们作为不同的列返回
Posted
技术标签:
【中文标题】MySql 检查值是不是存在,然后将它们作为不同的列返回【英文标题】:MySql check is values exists then return them as different columnsMySql 检查值是否存在,然后将它们作为不同的列返回 【发布时间】:2014-10-30 16:03:39 【问题描述】:我没有词来搜索/解释这个查询,所以我在这里问。所以我有一个表 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】:这称为枢轴
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
【讨论】:
不,我最初的问题不够清楚。我需要在不知道不同值的情况下执行此操作,并且我只检查 user_id 是否作为返回的不同值的单个记录 (EXISTS) 这是现在的问号,如果可以的话,我想在 mysql 中使其动态化。如果不是,我将不得不在我的程序中使用单独运行的查询来解决这个问题 @user2686172 你需要一个动态轴。\以上是关于MySql 检查值是不是存在,然后将它们作为不同的列返回的主要内容,如果未能解决你的问题,请参考以下文章