2014-01-20 61 views
-2

我想優化我的查詢(而不是結果)以刪除冗餘數據,使我可以在需要時輕鬆讀取和更新。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一次。

+0

您想只保留一行在一列中有重複值的行嗎?如果是這樣,你想保留哪一行? –

+0

我應該更好地解釋這一點。我想優化查詢。因此,實際查詢只包含對A的一個引用。我仍然希望獲得與我的示例中的查詢相同的結果。 – user2245191

+1

請編輯您的問題以提供期望的結果。 –

回答

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只有一次這樣的查詢,通過3行中n循環。這可能是一項性能改進。