Страница 1 из 1

Представление в sqlite с использованием INSERT INTO

Добавлено: 26 мар 2013, 21:47
SS_Rebelious
Есть две таблицы в базе SQLite, имеющие пару общих по содержанию атрибутов Name и Area. Хочу сделать представление, которое бы объединяло соответствующие колонки обеих таблиц. Однако, SQLite не хочет использовать INSERT INTO для подзапроса. Вот релевантная часть запроса:

Код: Выделить всё

INSERT INTO (SELECT Name, Area FROM table1)
SELECT Name, Area FROM table2

SQLite ругается на скобку "(". Если скобки убрать, ругается на SELECT. Если (SELECT Name, Area FROM table1) сдедлать временной таблицей, то INSERT INTO работает.

Re: Представление в sqlite с использованием INSERT INTO

Добавлено: 27 мар 2013, 05:58
trir

Код: Выделить всё

INSERT INTO table1
SELECT Name, Area FROM table2
для остальных полей добавь дефаултные значения, в нужном порядке

Re: Представление в sqlite с использованием INSERT INTO

Добавлено: 27 мар 2013, 19:04
SS_Rebelious
trir писал(а):

Код: Выделить всё

INSERT INTO table1
SELECT Name, Area FROM table2
для остальных полей добавь дефаултные значения, в нужном порядке
Да, если INSERT INTO скармливать уже созданную таблицу, то работает, но в table1 есть ещё куча других полей, которые мне в представлении совершенно не нужны, поэтому я и пытаюсь использовать подзапрос для того чтобы выдернуть только нужные мне поля. Ещё идеи есть?

Re: Представление в sqlite с использованием INSERT INTO

Добавлено: 28 мар 2013, 10:11
trir

Код: Выделить всё

INSERT INTO table1
SELECT null, Name, null, Area, null, null FROM table2

Re: Представление в sqlite с использованием INSERT INTO

Добавлено: 28 мар 2013, 20:06
SS_Rebelious
В общем, вот такое я пытаюсь сотворить:

Код: Выделить всё

CREATE VIEW summary AS
INSERT INTO (SELECT Name, SUM(Area) FROM table1 GROUP BY Name)
SELECT *
FROM (SELECT Name, SUM(Area) FROM table2 GROUP BY Name)

В ответ я получаю

Код: Выделить всё

SQL error: near "INSERT": syntax error
. Я пробовал различные варианты, но видимо, представления не хотят создаваться с помощью INSERT INTO, а сама команда INSERT INTO работает только с уже созданными таблицами (имеющими имя). Может есть альтернативный способ получить нужное представление?

Re: Представление в sqlite с использованием INSERT INTO

Добавлено: 29 мар 2013, 23:51
SS_Rebelious
В общем, вместо INSERT INTO надо использовать UNION ALL.

Код: Выделить всё

CREATE VIEW summary AS 
SELECT Name, SUM(Area) AS Area
FROM table1
GROUP BY Name
UNION ALL
SELECT Name, SUM(Area)
FROM table2
GROUP BY Name ;

Re: Представление в sqlite с использованием INSERT INTO

Добавлено: 30 мар 2013, 09:04
trir

Код: Выделить всё

CREATE VIEW summary AS
    SELECT Name, SUM(Area) AS Area
    FROM table1
    GROUP BY Name
  UNION ALL
    SELECT Name, SUM(Area) [b]AS Area[/b]
    FROM table2
    GROUP BY Name ;
View это просто способ сохранить запрос select

Re: Представление в sqlite с использованием INSERT INTO

Добавлено: 30 мар 2013, 12:25
SS_Rebelious
Я запостил финальное работающее выражение. AS Area в UNION ALL избыточно.