如何在 MySQL 中将多列处理为一列?
Posted
技术标签:
【中文标题】如何在 MySQL 中将多列处理为一列?【英文标题】:How to address multiple columns as one in MySQL? 【发布时间】:2012-02-10 00:17:15 【问题描述】:a
、b
和 c
列包含一些性质相同的值。我需要选择所有唯一值。如果我只有一列,我会使用类似
SELECT DISTINCT a
FROM mytable
ORDER BY a
;
但我需要将 a
、b
和 c
列视为一个列,并获取其中出现的所有唯一值。
例如,让这是mytable
的 CSV 表示,第一行命名列:
a, b, c
1, 2, 3
1, 3, 4
5, 7, 1
查询的结果是:
1
2
3
4
5
7
更新:我不明白为什么你们都建议将其包装在额外的SELECT
中?在我看来,答案是
(SELECT `a` AS `result` FROM `mytable`)
UNION (SELECT `b` FROM `mytable`)
UNION (SELECT `c` FROM `mytable`)
ORDER BY `result`;
不是吗?
【问题讨论】:
您能否在问题中添加您想要的表结构示例输出? 【参考方案1】:所以您想要一列都具有来自 a、b 和 c 的唯一值?试试这个:
(select a as yourField from d1)
union
(select b from d2)
union
(select c from d3)
order by yourField desc
limit 5
工作example
在要求更改后编辑...那里有您要求的order by
和limit
。当然,在这个例子中你只会得到 5 条记录
【讨论】:
op 要求唯一的结果集,而不仅仅是来自列的唯一结果。这将产生重复的值。 不,这不会产生重复。联合会为您提供来自所有三列的不同结果集。 我还想为结果列分配一个别名,对其进行排序和限制。在这种情况下,我应该把AS
、ORDER BY
和LIMIT
放在哪里?我也很好奇在哪里可以放分号:-)
mysqltutorial.org/sql-union-mysql.aspx 完全希望这将为您指明正确的方向。
查询有限制。 OP询问在哪里限制查询,所以我提供了信息。我还在答案中添加了一个工作示例【参考方案2】:
对不起,我想念你的问题。这是更新的查询。
select a from my table
UNION
select b from my table
UNION
select c from my table
【讨论】:
【参考方案3】:SELECT tmp.a
FROM
(SELECT column_1 AS a
FROM table
UNION
SELECT column_2 AS a
FROM table
UNION
SELECT column_3 AS a
FROM table) AS tmp
ORDER BY `tmp`.`a` ASC
【讨论】:
你的意思是这会产生不同的结果吗? @Ivan 我已经测试了答案的第一个版本并且有不同的结果,但我认为我的方法不需要不同,但您可以轻松实现排序并限制 手册说我可以把我的ORDER BY
和LIMIT
放在最后,只要我将单个SELECT
子句括在括号中,我可以用AS
指定别名第一个SELECT
。
@Ivan 不确定您想要什么作为结果集。您可以添加一个示例结果集来澄清这一点。
示例结果包含在问题中,不是吗?【参考方案4】:
试试这个:
SELECT b.iResult
FROM
(SELECT a as iResult FROM tableName
UNION
SELECT b as iResult FROM tableName
UNION
SELECT c as iResult FROM tableName) b
ORDER BY b.iResult
LIMIT BY 10 -- or put any number you want to limit.
【讨论】:
以上是关于如何在 MySQL 中将多列处理为一列?的主要内容,如果未能解决你的问题,请参考以下文章