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

Вопрос по SQL

Добавлено: 25 июл 2013, 08:37
sysrepos
Добрый день!
Есть таблица Numen (и таблицы tab1, tab2, tab3)
и допустим такие запросы:
select * from Numen, tab1 where Numen.Obj Intersects tab1.Obj into q1
select * from Numen, tab2 where Numen.Obj Intersects tab2.Obj into q2
select * from Numen, tab3 where Numen.Obj Intersects tab3.Obj into q3

вопрос: как мне получить таблицу таблицу Q4, объединенную из q1,q2,q3 (с помощью запросов, без сохранения таблиц q1,q2,q3 на диске)
(в обычных базах данных это делает оператор UNION)

Re: Вопрос по SQL

Добавлено: 25 июл 2013, 09:09
Slinger
Могу ошибаться, но, цитата из MapInfo, "Динамически можно объединять только базовые таблицы". Другими словами объединить выборки в ещё какую-то одну темповскую таблицу видимо не получится.

Re: Вопрос по SQL

Добавлено: 26 июл 2013, 09:39
juffin_h
Slinger писал(а):Другими словами объединить выборки в ещё какую-то одну темповскую таблицу видимо не получится.
Это так. Необходимо, чтобы Q4 была реальной таблицей. Т.е. ее предварительно надо создать.Тогда:
Insert Into Q4 ( COL1[, COL2...]) Select COL1[, COL2...] From Q1
Insert Into Q4 ( COL1[, COL2...]) Select COL1[, COL2...] From Q2
Insert Into Q4 ( COL1[, COL2...]) Select COL1[, COL2...] From Q3


Либо зайти с другого конца. Временно объединить исходные таблицы. Можно не создавать временную таблицу и все сложит в первую.
Insert Into tab1 ( COL1[, COL2...]) Select COL1[, COL2...] From tab2
Insert Into tab1 ( COL1[, COL2...]) Select COL1[, COL2...] From tab3

И теперь
select * from Numen, tab1 where Numen.Obj Intersects tab1.Obj into q4

tab1 надо восстановить, либо закрыть без сохранения, либо использовать временную таблицу.

Re: Вопрос по SQL

Добавлено: 27 июл 2013, 02:04
Boris
Небольшое дополнение, когда очень хочется "все в одном", то MapInfo разрешает использовать в условии WHERE оператора SQL условие, обращенное на выборку SQL, основанную на операторах равно, не равно, ANY, IN.