2014-01-10 2 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 сделать некоторые просто строка замены, как Баш может? Таким образом, мне не нужно беспокоиться о создании вида, чтобы очистить их при выходе.

+0

Вы можете построить SQL, используя такие переменные, независимо от того, какой язык более высокого уровня имеет доступ к MySQL. – eggyal

+0

Я это знаю. Но, возможно, одно и то же с помощью стандартных инструментов mysql? Просто хотел знать, не так ли. – EvgenijM86

+0

И нет. Я не могу использовать временные таблицы, потому что они хранят значения. Запрос может отображать разные значения в разное время, и я хотел бы узнать, обновлены ли они. – EvgenijM86

ответ

0

Вы можете определить VIEW с от ваших SELECT заявлений:

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

Я вижу. Поэтому, возможно, это невозможно в инструменте CLI mysql ... – 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

Смежные вопросы