【问题标题】:How to address multiple columns as one in MySQL?如何在 MySQL 中将多列处理为一列?
【发布时间】:2012-02-10 00:17:15
【问题描述】:

abc 列包含一些性质相同的值。我需要选择所有唯一值。如果我只有一列,我会使用类似

SELECT DISTINCT a FROM mytable ORDER BY a;

但我需要将 abc 列视为一个列,并获取其中出现的所有唯一值。

例如,让这是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`;

不是吗?

【问题讨论】:

  • 您能否在问题中添加您想要的表结构示例输出?

标签: mysql sql select


【解决方案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 bylimit。当然,在这个例子中你只会得到 5 条记录

【讨论】:

  • op 要求唯一的结果集,而不仅仅是来自列的唯一结果。这将产生重复的值。
  • 不,这不会产生重复。联合会为您提供来自所有三列的不同结果集。
  • 我还想为结果列分配一个别名,对其进行排序和限制。在这种情况下,我应该把ASORDER BYLIMIT 放在哪里?我也很好奇在哪里可以放分号:-)
  • 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 BYLIMIT 放在最后,只要我将单个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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-12
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多