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个值不是很多,除非您正在寻找毫秒响应时间。计算成本较高的部分是表中每个值的不同的,尽管每列上单独的索引会有所帮助。