Как использовать псевдоним столбца оператора create table в базовом операторе select-join? - PullRequest
0 голосов
/ 18 января 2012

У меня возникла небольшая проблема с запросом, который я хочу построить.Идея состоит в том, чтобы построить новую таблицу, основанную на соединении с той же старой таблицей, где выполняется какой-то «дорогой» расчет.

Проблема

Я могуне использовать вычисленный результат (псевдоним) списка полей в предложении where (или on) базового выбора.

Почему бы не вычислить его снова?

  • Я бы не хотел снова вычислять результат, так как это таблица входа 1,5 млн., И я присоединяюсь ко всему.В предложении on есть еще несколько условий, но это не влияет на количество операций.Поэтому я бы предпочел не делать это дважды за соединение.
  • Я просто хочу сейчас, если это возможно:)

Оператор SQL

CREATE TABLE `newTable` AS (
    SELECT (*COMPUTATION*) AS `calculated` 
    FROM oldTable AS t1 
    JOIN oldTable as t2 ON (
        t1.user != t2.user
        AND *other conditions*
    )
    WHERE `calculated` < *some number*
);

Я уже думал об использовании функций или чего-то еще, но я думаю, что это должно быть выполнимо в одном простом запросе.

1 Ответ

1 голос
/ 18 января 2012

Вы пробовали обернуть свой внутренний запрос еще одним уровнем ??

CREATE TABLE `newTable` AS 
(   select PreQuery.Calculated
       from ( SELECT (*COMPUTATION*) AS `calculated` 
                 FROM oldTable AS t1 
                 JOIN oldTable as t2 ON 
                   ( t1.user != t2.user
                     AND *other conditions* 
                   ) ) PreQuery
       where PreQuery.Calculated < *some number*
);
...