首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mysql的列中获取所有已使用的值?

问如何在mysql的列中获取所有已使用的值?
EN

Stack Overflow用户
提问于 2015-05-23 20:35:42
回答 2查看 112关注 0票数 0

我有一个包含如下列和值的MySQL表:

代码语言:javascript
复制
Column "A": 1, 5, 3, 2, 3, 1, 4, 5, ...
Column "B": 11, 15, 10, 12, 13, 14, 15, 10, 11, ...
Column "C": .... etc.

表中有多个具有重复数值的列。

我想在每一列中找出唯一的值。因此,对于"A“栏,它将返回1,2,3,4,5。

目前,我正在为一列使用此查询:

SELECT concat(A) FROM table GROUP BY A;

但我不知道如何处理多列

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-23 20:49:37

如果它是一组足够小的值,您可以使用GROUP_CONCAT聚合函数,并使用DISTINCT关键字

例如:

代码语言:javascript
复制
SELECT GROUP_CONCAT(DISTINCT a ORDER BY a) AS a_values 
     , GROUP_CONCAT(DISTINCT b ORDER BY b) AS b_values 
     , GROUP_CONCAT(DISTINCT c ORDER BY c) AS c_values 
  FROM mytable 

GROUP_CONCAT返回的字符串的长度受到max_group_concat_len变量(它在引用中)的限制,我认为max_allowed_packet也起作用。

比较返回到max_group_concat_len的字符串的长度,看看它是否更短,以了解返回字符串没有被静默截断。

如果您想将所有这些值合并到一个单独的列表中,您可以这样做:

代码语言:javascript
复制
SELECT GROUP_CONCAT(DISTINCT val ORDER BY val) AS col_values 
  FROM ( SELECT a AS val FROM mytable 
          UNION 
         SELECT b FROM mytable
          UNION
         SELECT c FROM mytable
       ) v

编辑

我对查询中CONCAT函数的使用感到困惑,并误读了规范。上面的查询返回一个单个行,并返回一个与OP指定的结果完全相同的结果:

代码语言:javascript
复制
1,2,3,4,5,...

如果我们想在一个单独的行上返回每个值,结果如下所示:

代码语言:javascript
复制
val
---
  1
  2
  3
  4
  5

然后,Tim3880的答案中的查询就可以做到这一点,但是外部查询并不是真正必要的。

我希望按以下方式添加一个订单,并实际编写如下查询:

代码语言:javascript
复制
(SELECT a AS val FROM mytable)
UNION
(SELECT b AS val FROM mytable)
UNION
(SELECT c AS val FROM mytable)
ORDER BY 1

编辑

添加了SQL,显示了我如何解释规范(表、列、示例值),以及上面SQL语句的结果。一个语句作为单个行返回不同的值(前面的查询)和一个返回逗号分隔列表的语句(我的答案中的第一个查询)。

http://sqlfiddle.com/#!9/3d61c/1

如果我们想识别值出现在

代码语言:javascript
复制
SELECT v.val
     , GROUP_CONCAT(DISTINCT v.col ORDER BY v.col) AS in_cols
     , MAX(v.col='a') AS in_col_a
     , MAX(v.col='b') AS in_col_b
     , MAX(v.col='c') AS in_col_c
  FROM (
         SELECT a AS val, 'a' AS col FROM mytable
         UNION
         SELECT b AS val, 'b' AS col FROM mytable
         UNION
         SELECT c AS val, 'c' AS col FROM mytable
       ) v
 GROUP BY v.val
 ORDER BY v.val
票数 2
EN

Stack Overflow用户

发布于 2015-05-23 20:41:08

如果您的查询对A有效,那么您可以使用以下方法对A、B、C进行查询:

代码语言:javascript
复制
SELECT A FROM 
( 
  SELECT A FROM table 
  UNION 
  SELECT B FROM table 
  UNION
  SELECT C FROM table
) e

只要这三列具有兼容的类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30417318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档