2014-01-10 84 views
0

有時我會編寫跨越十個+行的複雜查詢。然後我需要在其他複雜查詢中查詢這些查詢。是否有可能給查詢一個名稱,並簡單地讓該名稱在運行時被實際查詢替換?MySql CLI - 查詢的別名/名稱

例如:

SET var_a = 'select f1, sum(f2) where .... (select .. from (select .. from))'; 
SET var_b = 'select g1, sum(g2) where .... (select .. from (select .. from))'; 

select z1, z2 from var_a union var_b; 

能在mysql CLI做一些簡單的字符串替換諸如bash可以嗎?這樣我就不必費心創建視圖,只是在退出時清理它們。

+0

你可以用任何更高級語言訪問MySQL時使用這些變量來構造SQL。 – eggyal

+0

我知道。但是,對於mysql標準工具也許可以這樣做?只是想知道它是否。 – EvgenijM86

+0

沒有。我不能使用臨時表,因爲它們存儲值。查詢可以在不同的時間顯示不同的值,我想看看他們是否已經更新。 – EvgenijM86

回答

0

你可以從你的SELECT語句定義VIEW S:

CREATE VIEW var_a AS 
    SELECT f1, SUM(f2) WHERE .... (SELECT .. FROM (SELECT .. FROM)); 

CREATE VIEW var_b AS 
    SELECT g1, SUM(g2) WHERE .... (SELECT .. FROM (SELECT .. FROM)); 

,然後用它們作爲後續查詢 「表」:

SELECT f1 FROM var_a UNION SELECT g1 FROM var_b 
+0

我知道你可以。但是,視圖並不代替可以作爲其他查詢的一部分的_any_查詢。甚至它的一部分,如:SET var_where ='WHERE ....一些非常複雜的條件選擇...' – EvgenijM86

+0

@ EvgenijM86:這樣的SQL構造應該以更高的語言從您訪問MySQL。 – eggyal

+0

我明白了。所以它可能不可能在mysql CLI工具裏面... – EvgenijM86

1

該關閉的解決方案,我發現是這樣的:

SET @var_a = 'select f1, sum(f2) where .... (select .. from (select .. from))'; 
SET @var_b = 'select g1, sum(g2) where .... (select .. from (select .. from))'; 

SET @s = CONCAT('select ... from (', @var_a, ' union all ', @var_b, ')a'); 
PREPARE stmt FROM @s; EXECUTE stmt; 

有點笨重,但它工作。

+0

是不是我在[我的評論]中提出的解決方案(http://stackoverflow.com/questions/21042541/mysql-cli-alias-name-for-queries/21042948#comment31637090_21042948)? – eggyal