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

Кроме QGIS
Ответить
Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

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

Сообщение SS_Rebelious » 26 мар 2013, 21:47

Есть две таблицы в базе 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 работает.
Последний раз редактировалось SS_Rebelious 29 мар 2013, 23:51, всего редактировалось 1 раз.
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

trir
Гуру
Сообщения: 5354
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 27 мар 2013, 05:58

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

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

Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

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

Сообщение SS_Rebelious » 27 мар 2013, 19:04

trir писал(а):

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

INSERT INTO table1
SELECT Name, Area FROM table2
для остальных полей добавь дефаултные значения, в нужном порядке
Да, если INSERT INTO скармливать уже созданную таблицу, то работает, но в table1 есть ещё куча других полей, которые мне в представлении совершенно не нужны, поэтому я и пытаюсь использовать подзапрос для того чтобы выдернуть только нужные мне поля. Ещё идеи есть?
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

trir
Гуру
Сообщения: 5354
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 28 мар 2013, 10:11

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

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

Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

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

Сообщение SS_Rebelious » 28 мар 2013, 20:06

В общем, вот такое я пытаюсь сотворить:

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

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 работает только с уже созданными таблицами (имеющими имя). Может есть альтернативный способ получить нужное представление?
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

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

Сообщение SS_Rebelious » 29 мар 2013, 23:51

В общем, вместо 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 ;
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

trir
Гуру
Сообщения: 5354
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 30 мар 2013, 09:04

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

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

Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

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

Сообщение SS_Rebelious » 30 мар 2013, 12:25

Я запостил финальное работающее выражение. AS Area в UNION ALL избыточно.
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

Ответить

Вернуться в «Свободные, бесплатные, открытые ГИС»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя