如何在mysql中获取列中使用的所有值?
我有一个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
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