如何选择一列中两个不同列中可用的值列表?

奥利

我有一个tableX作为:

|-column1-|-column2-|
|   a1    |   b4    |
|   a2    |   b5    |
|   a3    |   b6    |

我想将这些值选择为一列作为结果:

|-result--|
|   a1    |
|   a2    |
|   a3    |
|   b4    |
|   b5    |
|   b6    |

看起来很简单,但是所有我认为它们只是将值合并/合并到单个列中的问题。我需要将它们添加为“列表”。

我可以使用union子句,例如:

select column1 as result from tableX
UNION
select column2 as result from tableX

但是性能会很差(慢2倍),而且我的SQL语句会很庞大,因为tableX是一个非常复杂的子查询(不利于维护和可读性)。

标记为MySQL,但我将接受所有DBMS的答案

戈登·利诺夫

首先,我建议union all而不是union,所以:

select column1 as result from tableX
union all
select column2 as result from tableX;

union删除重复项会产生开销。如果tableX是一张桌子,那可能很好。尽管对表进行了两次扫描,但是在大多数情况下,表页面已经在页面缓存中,因此第二次扫描应该比第一次扫描快得多。

如果tableX确实是一个复杂的视图,则可以执行一些更有效的操作:

select (case when n.n = 1 then column1 else column2 end) as column
from tableX cross join
     (select 1 as n union all select 2) n;

如果您仍然需要删除重复项,请使用select distinct

select distinct (case when n.n = 1 then column1 else column2 end) as column
from tableX cross join
     (select 1 as n union all select 2) n;

但是,这可能会抵消任何性能提升。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

选择在同一列中具有两个不同值的行

如何计算同一列中的两个不同的列值?

SQL-如何在一列和两个结果中获取两个不同列的值?

如何从 SQL 连接中的同一列返回两个不同的值?

如何在 MySQL 中获取同一列的两个不同值

如何从R中的两个不同数据帧中添加两列,其中一列只是另一列的唯一值的子集

将两个不同列表中的值顺序分配给python中数据框的一列

根据另一列中的另外两个值选择列的值

MySQL:如果另一列在联结表中具有两个确定的值,则从一列中选择不同的值

一列中两个不同条件的总和

如何将另一列中的值划分为一组的两个不同因素?

如何在同一列表中具有两个不同的排序顺序?

如何减去两个列值并在Java中的另一列中显示

如何比较两个表与一列在PowerShell中略有不同的列?

根据另一列中的值比较一列中的两个值

在一列中连接具有不同值的两个表

在csv的同一列中添加两个不同的值

同一列中的两个值

比较同一列中的两个值

如何在颤振中在一列中打印两个列表?

如何串联两个列值并存储在另一列中mysql php

如何基于单独的日期列划分同一列中的两个值

如何在MySQL的另一列中的两个唯一值之间更新一列?

如何将两个表中的值包含在同一列中

如何从表中的同一列“计数”两个不同的条件?

如何从同一列中的两个不同日期输出前 5 名?

熊猫:如何基于同一列中的两个条件选择行

如何在蜂巢中选择两个列中不同的蜂巢中的所有值

从一个表中的两个不同列中选择数据,这些列指向另一个表中的同一列