Mysql “多重”;选择DISTINCT";查询

Mysql “多重”;选择DISTINCT";查询,mysql,select,distinct,Mysql,Select,Distinct,我尝试了几种方法来选择表中的多个列,以便从表中获取唯一或不同的数据,包括以下查询: SELECT (SELECT GROUP_CONCAT(DISTINCT a) FROM TableName), (SELECT GROUP_CONCAT(DISTINCT b) FROM TableName), (SELECT GROUP_CONCAT(DISTINCT c) FROM TableName); SELECT(a, b, c) FROM TableNamegroup by 'a' order b

我尝试了几种方法来选择表中的多个列,以便从表中获取唯一或不同的数据,包括以下查询:

SELECT
(SELECT GROUP_CONCAT(DISTINCT a) FROM TableName),
(SELECT GROUP_CONCAT(DISTINCT b) FROM TableName),
(SELECT GROUP_CONCAT(DISTINCT c) FROM TableName);

SELECT(a, b, c) FROM TableNamegroup by 'a' order by a asc;

SELECT DISTINCT a FROM TableName
UNION
SELECT DISTINCT b FROM TableName
UNION
SELECT DISTINCT c FROM TableName;
但它们要么不起作用,要么以我无法使用的格式返回信息。我需要的是这样的格式:

+--------------------+
| a    | b    | c    |
|--------------------|
| 1    | 1    | 1    |
| 2    | 2    | 2    |
| 3    | 3    | 3    |
   etc......

除了进行单独的查询外,还有其他方法吗?

如果您需要三列,那么您的
选择需要三列。如果您想要独特的组合:

select distinct a, b, c
from TableName;
这是你想要的吗

我怀疑您希望在三列中列出唯一ID。您可以使用MySQL中的变量执行此操作:

select rn, max(a) as a, max(b) as b, max(c) as c
from ((select @rna := @rna + 1 as rn, a, null as b, null as c
       from (select distinct a from TableName) t cross join
            (select @rna := 0) const
      ) union all
      (select @rnb := @rnb + 1 as rn, null, b, null
       from (select distinct b from TableName) t cross join
            (select @rnb := 0) const
      ) union all
      (select @rnc := @rnc + 1 as rn, null, null, c
       from (select distinct c from TableName) t cross join
            (select @rnc := 0) const
       group by c
      )
     ) abc
group by rn
order by rn;

以下是它工作的示例。

与此所需输出相对应的源数据是什么?您是从同一个表中查询三次还是多个表?为什么不从TableName work中选择不同的a、b、c?此查询不工作,它返回一个错误:
操作数应包含1列。
@Ben。哪个问题?第一个看起来很基本。我指的是第一个基本的查询,但我有一种新的感觉,你只是把它作为一个例子?第二个问题正是我想要的,非常感谢:Dcan您能告诉我,如果这个查询具有更大的数据字段,它是否会非常占用处理器吗?e、 g.如果每个字段有超过1000个条目?如果是这样的话,那么把它拆散会更好吗?@Ben。1000个值不是很多,除非您正在寻找毫秒响应时间。计算成本较高的部分是表中每个值的
不同的
,尽管每列上单独的索引会有所帮助。