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 检查值是不是存在,然后将它们作为不同的列返回的主要内容,如果未能解决你的问题,请参考以下文章

PHP:检查 MySQL TABLE 是不是已作为错误条件存在? [复制]

检查Java中的MySQL DB中是不是存在值?

检查 MYSQL 表行中是不是存在特定时间范围

Swift Firebase 检查值是不是存在

如何检查一个值是不是已经存在以避免重复?

使用来自另一个散列的值作为散列名称检查散列中是不是存在键