avshap: (Default)
avshap ([personal profile] avshap) wrote2006-07-18 04:23 pm

SQL 2

Чего-то туплю. Больше десятка таблиц с тарифами операторов. Нужен хитровынутый запрос чтобы из этого получить временную таблицу (или представлениe [VIEW]) с ценами всех операторов для каждого телефонного кода. Попытка решить задачу в лоб приводит только к тому, что Postgres надолго задумывается. JOIN тут явно не пройдёт (неохота мне "пирамиду" временных таблиц делать). В сторону чего копать?

[identity profile] ping-ving.livejournal.com 2006-07-18 10:45 am (UTC)(link)
Таблицы с тарифными планами одной структуры?
Тебе нужно получить таблицу с полями "Префикс" "Оператор" "Тариф"?

[identity profile] ping-ving.livejournal.com 2006-07-18 10:49 am (UTC)(link)
Если постгрес умеет union all - то и используй.
Однотипные запросы из таблиц с данными операторов, и union их.

[identity profile] avshap.livejournal.com 2006-07-18 10:57 am (UTC)(link)
Уточню. В результате требуется таблица вида Префикс| Тариф оператора 1| Тариф оператора 2| ... |Тариф оператора N|

[identity profile] boa-constrictr.livejournal.com 2006-07-18 11:03 am (UTC)(link)
create table forget_about_normal_forms as select name, tarif as tarif1, null as tarif2, null as tarif3 from oper1
union all
select name, null as tarif1, tarif as tarif2, null as tarif3 from oper2
union all
select name, null as tarif1, null as tarif2, tarif as tarif3 from oper3

возможно синтаксис малость другой, но несущественно

[identity profile] ping-ving.livejournal.com 2006-07-18 11:09 am (UTC)(link)
Чистое коддохульство.
Хотя бля отчёта проканает.

[identity profile] avshap.livejournal.com 2006-07-18 11:14 am (UTC)(link)
Это типа для выяснения, кто куда дешевле будет...

[identity profile] sergey-ilyin.livejournal.com 2006-07-18 11:24 am (UTC)(link)
Только вот из таблицы вида

"префикс | оператор | тариф"

это выясняется запросом, похожим на ;) "select префикс, min(тариф) group by префикс".

А из этого монстра как?

[identity profile] boa-constrictr.livejournal.com 2006-07-18 11:16 am (UTC)(link)
Чистое коддохульство.
Хотя бля отчёта проканает.

Умри, лучше не скажешь.

[identity profile] boa-constrictr.livejournal.com 2006-07-18 10:46 am (UTC)(link)
Таблицы одной структуры?
если да, то
select * from t1
union all select * from t2
...
union all select * from tN
where
...
если разной, но в принципе похожей, то чуть сложнее, но идея та же.

А умеет ли постгрес

[identity profile] ping-ving.livejournal.com 2006-07-18 10:47 am (UTC)(link)
union?

Re: А умеет ли постгрес

[identity profile] boa-constrictr.livejournal.com 2006-07-18 10:54 am (UTC)(link)
когда я имел с ним дело, а это было довольно давно, умел, и неплохо

[identity profile] avshap.livejournal.com 2006-07-18 10:53 am (UTC)(link)
А. Хреново тем, что для тарифа каждого оператора должна быть своя колонка. Union такое не даёт.

[identity profile] boa-constrictr.livejournal.com 2006-07-18 10:58 am (UTC)(link)
Операторов хоть не миллион?
а названия операторов хоть в одной колонке?
рассмотрим для случая из трех операторов
select name, tarif as tarif1, '' as tarif2, '' as tarif3 from oper1
union all
select name, '' as tarif1, tarif as tarif2, '' as tarif3 from oper2
union all
select name, '' as tarif1, '' as tarif2, tarif as tarif3 from oper3

[identity profile] avshap.livejournal.com 2006-07-18 11:03 am (UTC)(link)
Пока где-то полтора десятка. Названий операторов в таблицах нет. Переделывать СУБД заново меня пока ломает...

[identity profile] boa-constrictr.livejournal.com 2006-07-18 11:06 am (UTC)(link)
Если чиста создать таблицу, чтобы потом напечатать отчет, то нормально. Работать потом с данными из такой таблицы - легче повеситься. Ну, или там пивка пойти попить.

[identity profile] avshap.livejournal.com 2006-07-18 11:16 am (UTC)(link)
Работать. У нас подразуемвается, что я вообше эту работу (выяснить, кто и куда из операторов дешевле обходится) должен вручную в электронной таблице выполнять. :)

[identity profile] boa-constrictr.livejournal.com 2006-07-18 11:19 am (UTC)(link)
Если работать, то можно придумать структуру повеселее.

[identity profile] sergey-ilyin.livejournal.com 2006-07-18 11:27 am (UTC)(link)
Тогда ты не хочешь таблицу такой дикой структуры :)

[identity profile] avshap.livejournal.com 2006-07-18 11:54 am (UTC)(link)
Я хочу нормальную работу, чтобы был только паяльник, осциллограф и мультиметр. Но у нас её не завезли. ;)

[identity profile] sergey-ilyin.livejournal.com 2006-07-18 12:23 pm (UTC)(link)
http://www.voskhod.nnov.ru/

У меня там шапочно знакомый генеральный директор. И вообще, масса связей через КБ Сухого. Поинтересоваться?

[identity profile] avshap.livejournal.com 2006-07-18 01:50 pm (UTC)(link)
Гм. Им нужен полуслепой, без опыта работы по специальности (не считать же за такой мелкое радиолюбительство и курсовики с дипломом, где я так и не смог сделать управляющие программы и печатную плату?), да и ещё не могущий выехать сразу (мне только для переезда придётся несколько месяцев копить)? Сомневаюсь.

[identity profile] sergey-ilyin.livejournal.com 2006-07-18 01:54 pm (UTC)(link)
Гы. А с положительной стороны себя охарактеризовать себя слабО? ;)

Потому как кто именно им нужен -- я не знаю. Но люди им нужны и паяльников там много -- это факт.

[identity profile] avshap.livejournal.com 2006-07-18 02:30 pm (UTC)(link)
Гы. А с положительной стороны себя охарактеризовать себя слабО?
Не умею.

Потому как кто именно им нужен -- я не знаю. Но люди им нужны и паяльников там много -- это факт.
В любом случае всё упирается в то, что с моей зарплатой на переезд и, скорее всего, обратную дорогу придётся копить несколько месяцев.
rvb: (Default)

[personal profile] rvb 2006-07-18 10:53 am (UTC)(link)
union all, возможно, с приведением всех структур к "общему знаменателю"

[identity profile] a-rakovskij.livejournal.com 2006-07-20 08:11 am (UTC)(link)
Postgres принципиален? А то такое на DB2 (у нее сильно расширен SQL) я делал.