MySQL union全部删除重复项

时间:2014-01-20 15:10:13

标签: mysql

我想优化我的查询(不是结果)来删除冗余数据,以便在需要时轻松阅读和更新。

表格

A, B,  C
1  B1  1.99
2  B2  6.99
3  B3  7.99

我有一个看起来像的查询:

SELECT A, B FROM TABLE
UNION ALL
SELECT A, C FROM TABLE
UNION ALL
SELECT A, 'string' FROM TABLE;

在这种情况下,A在我的查询中是多余的,因为它被多次写入。如何让此查询只有一次?感谢。

编辑:我想看到完全相同的结果,但SQL代码仅引用一列A列。

1 个答案:

答案 0 :(得分:0)

以下代码:

SELECT A, B FROM TABLE
UNION ALL
SELECT A, C FROM TABLE
UNION ALL
SELECT A, 'string' FROM TABLE;

table读取三次。它实际上可以优化:

select A,
       (case when n = 1 then B
             when n = 2 then C
             when n = 3 then 'string'
        end) as B
from TABLE cross join
     (select 1 as n union all select 2 union all select 3) n;

对于此查询,SQL引擎通常只扫描TABLE一次,循环遍历n中的3行。这可能会改善绩效。