Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mysql中获取列中使用的所有值?_Mysql - Fatal编程技术网

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

如何在mysql中获取列中使用的所有值?,mysql,Mysql,我有一个MySQL表,其列和值如下: Column "A": 1, 5, 3, 2, 3, 1, 4, 5, ... Column "B": 11, 15, 10, 12, 13, 14, 15, 10, 11, ... Column "C": .... etc. SELECT GROUP_CONCAT(DISTINCT val ORDER BY val) AS col_values FROM ( SELECT a AS val FROM mytable UNION

我有一个MySQL表,其列和值如下:

Column "A": 1, 5, 3, 2, 3, 1, 4, 5, ...
Column "B": 11, 15, 10, 12, 13, 14, 15, 10, 11, ...
Column "C": .... etc.
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
(SELECT a AS val FROM mytable)
UNION
(SELECT b AS val FROM mytable)
UNION
(SELECT c AS val FROM mytable)
ORDER BY 1
表中有多个列具有重复的数值

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

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

从表组中按A选择concat(A)


但是我不知道如何对多个列执行此操作

如果您的查询适用于A,那么您可以使用以下方法对A、B、C执行此操作:

SELECT A FROM 
( 
  SELECT A FROM table 
  UNION 
  SELECT B FROM table 
  UNION
  SELECT C FROM table
) e

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

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

SELECT A FROM 
( 
  SELECT A FROM table 
  UNION 
  SELECT B FROM table 
  UNION
  SELECT C FROM table
) e

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

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

SELECT A FROM 
( 
  SELECT A FROM table 
  UNION 
  SELECT B FROM table 
  UNION
  SELECT C FROM table
) e

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

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

SELECT A FROM 
( 
  SELECT A FROM table 
  UNION 
  SELECT B FROM table 
  UNION
  SELECT C FROM table
) e

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

如果它是一组足够小的值,您可以使用
GROUP\u CONCAT
aggregate函数和
DISTINCT
关键字

例如:

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\u CONCAT
返回的字符串长度受
max\u GROUP\u CONCAT\u len
变量(在引用中)的限制,我认为
max\u allowed\u packet
也起作用

比较返回到
max\u group\u concat\u len
的字符串的长度,看它是否更短,以知道返回字符串没有被静默截断


如果要将所有这些值组合到一个单独的列表中,可以执行以下操作:

Column "A": 1, 5, 3, 2, 3, 1, 4, 5, ...
Column "B": 11, 15, 10, 12, 13, 14, 15, 10, 11, ...
Column "C": .... etc.
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
(SELECT a AS val FROM mytable)
UNION
(SELECT b AS val FROM mytable)
UNION
(SELECT c AS val FROM mytable)
ORDER BY 1
编辑

我被查询中使用的
CONCAT
函数弄糊涂了,误读了规范。上面的查询返回一行,并返回一个与OP指定的结果完全相同的结果:

1,2,3,4,5,...
如果要在单独的行上返回每个值,结果如下所示:

val
---
  1
  2
  3
  4
  5
然后,来自Tim3880答案的查询就可以做到这一点,但是外部查询并不是必需的

我想添加一个orderby,并实际编写如下查询:

Column "A": 1, 5, 3, 2, 3, 1, 4, 5, ...
Column "B": 11, 15, 10, 12, 13, 14, 15, 10, 11, ...
Column "C": .... etc.
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
(SELECT a AS val FROM mytable)
UNION
(SELECT b AS val FROM mytable)
UNION
(SELECT c AS val FROM mytable)
ORDER BY 1
编辑

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

如果我们想确定某个值出现在哪个列中

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

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

例如:

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\u CONCAT
返回的字符串长度受
max\u GROUP\u CONCAT\u len
变量(在引用中)的限制,我认为
max\u allowed\u packet
也起作用

比较返回到
max\u group\u concat\u len
的字符串的长度,看它是否更短,以知道返回字符串没有被静默截断


如果要将所有这些值组合到一个单独的列表中,可以执行以下操作:

Column "A": 1, 5, 3, 2, 3, 1, 4, 5, ...
Column "B": 11, 15, 10, 12, 13, 14, 15, 10, 11, ...
Column "C": .... etc.
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
(SELECT a AS val FROM mytable)
UNION
(SELECT b AS val FROM mytable)
UNION
(SELECT c AS val FROM mytable)
ORDER BY 1
编辑

我被查询中使用的
CONCAT
函数弄糊涂了,误读了规范。上面的查询返回一行,并返回一个与OP指定的结果完全相同的结果:

1,2,3,4,5,...
如果要在单独的行上返回每个值,结果如下所示:

val
---
  1
  2
  3
  4
  5
然后,来自Tim3880答案的查询就可以做到这一点,但是外部查询并不是必需的

我想添加一个orderby,并实际编写如下查询:

Column "A": 1, 5, 3, 2, 3, 1, 4, 5, ...
Column "B": 11, 15, 10, 12, 13, 14, 15, 10, 11, ...
Column "C": .... etc.
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
(SELECT a AS val FROM mytable)
UNION
(SELECT b AS val FROM mytable)
UNION
(SELECT c AS val FROM mytable)
ORDER BY 1
编辑

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

如果我们想确定某个值出现在哪个列中

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

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

例如:

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\u CONCAT
返回的字符串长度受
max\u GROUP\u CONCAT\u len
变量(在引用中)的限制,我认为
max\u allowed\u packet
也起作用

比较返回到
max\u group\u concat\u len
的字符串的长度,看它是否更短,以知道返回字符串没有被静默截断


如果要将所有这些值组合到一个单独的列表中,可以执行以下操作:

Column "A": 1, 5, 3, 2, 3, 1, 4, 5, ...
Column "B": 11, 15, 10, 12, 13, 14, 15, 10, 11, ...
Column "C": .... etc.
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
(SELECT a AS val FROM mytable)
UNION
(SELECT b AS val FROM mytable)
UNION
(SELECT c AS val FROM mytable)
ORDER BY 1
编辑

我被查询中使用的
CONCAT
函数弄糊涂了,误读了规范。上面的查询返回一行,并返回一个与OP指定的结果完全相同的结果:

1,2,3,4,5,...
如果要在单独的行上返回每个值,结果如下所示:

val
---
  1
  2
  3
  4
  5
然后,来自Tim3880答案的查询就可以做到这一点,但是外部查询并不是必需的

我想添加一个orderby,并实际编写如下查询:

Column "A": 1, 5, 3, 2, 3, 1, 4, 5, ...
Column "B": 11, 15, 10, 12, 13, 14, 15, 10, 11, ...
Column "C": .... etc.
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
(SELECT a AS val FROM mytable)
UNION
(SELECT b AS val FROM mytable)
UNION
(SELECT c AS val FROM mytable)
ORDER BY 1
编辑

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

如果我们想确定某个值出现在哪个列中

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

如果它是一组足够小的值,您可以使用
GROUP\u CONCAT
aggregate