Можно ли назначить результат запроса как временную «таблицу»? - PullRequest
0 голосов
/ 19 сентября 2019

Я хочу выполнить дальнейшую обработку данных о результате запроса - мой запрос здесь:

SELECT id, gamenumber, team, name, points 
FROM games
WHERE gamenumber IN (
    SELECT gamenumber
    FROM games
    WHERE
        (name = 'Tom Smith' AND team = 'team tower') OR
        (name = 'Andy Cooper' AND team = 'team windy')
    GROUP BY gamenumber
    HAVING MIN(name) <> MAX(name)
);

, который дает такой результат:

gamenumber  team    name    points
1000    team tower  Tom Smith   100
1000    team vegas  John Little 90
1000    team windy  Andy Cooper 20
1003    team tower  Tom Smith   89
1003    team bars   Jonathan Swift  21
1003    team hammock    Bill Mccain 31
1003    team windy  Andy Cooper -1

Но мне нужноуглубиться в это, а затем на основе результата здесь ex суммировать значения.

Итак, я подумал, можно ли дать результат запроса «имя» в SQL?поэтому я могу сделать что-то вроде этого (назвав результат запроса в TEMP_TABLE):

TEMP_TABLE = SELECT id, gamenumber, team, name, points 
FROM games
WHERE gamenumber IN (
    SELECT gamenumber
    FROM games
    WHERE
        (name = 'Tom Smith' AND team = 'team tower') OR
        (name = 'Andy Cooper' AND team = 'team windy')
    GROUP BY gamenumber
    HAVING MIN(name) <> MAX(name)
);

А потом я могу сделать что-то вроде этого:

SELECT * FROM TEMP_TABLE

Это что-то вродеэто возможно?

1 Ответ

1 голос
/ 19 сентября 2019

У вас есть два разных варианта.Выбор зависит от того, насколько свежими должны быть данные.

A TEMPORARY TABLE отделен от исходного набора данных, который был запрошен.Если исходные данные изменяются, временная таблица не изменяется ...

CREATE TEMP TABLE temp_table AS
SELECT id, gamenumber, team, name, points 
FROM games
WHERE gamenumber IN (
    SELECT gamenumber
    FROM games
    WHERE
        (name = 'Tom Smith' AND team = 'team tower') OR
        (name = 'Andy Cooper' AND team = 'team windy')
    GROUP BY gamenumber
    HAVING MIN(name) <> MAX(name)
);

A ВРЕМЕННЫЙ ВИД , однако, будет обновляться всякий раз, когда обновляется исходный набор данных ...

CREATE TEMP VIEW temp_view AS
SELECT id, gamenumber, team, name, points 
FROM games
WHERE gamenumber IN (
    SELECT gamenumber
    FROM games
    WHERE
        (name = 'Tom Smith' AND team = 'team tower') OR
        (name = 'Andy Cooper' AND team = 'team windy')
    GROUP BY gamenumber
    HAVING MIN(name) <> MAX(name)
);

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

SELECT * FROM temp.temp_table;
SELECT * FROM temp.temp_view;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...