powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Суммирование таблиц - задачка по SQL
14 сообщений из 39, страница 2 из 2
Суммирование таблиц - задачка по SQL
    #33106033
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ChA. Если СУБД не поддерживает FULL OUTER JOIN, то уж where ... *=* ... должна поддерживать?

Хотя, конечно, UNION ALL в этой задаче - единственно верное решение. А что лучше по VIEW, или по TEMPTABLE - зависит от конкретной СУБД.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33106041
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если СУБД не поддерживает full outer join, то это не потому, что разработчики не смогли договориться о синтаксисе. А потому, что не разработали такую фичу. Поэтому врядли оракловский синтаксис *=* спасет пользователей Informix 7.

К сожалению, Sybase IQ почему-то не понимает и Outer join on (1=0). так что дополненная и исправленная версия selecta будет (при условии что col1 положительно, что с ключами как правило и бывает)
select isnull (t1.col1,t2.col1) col1,
sum(isnull (t1.col2, t2.col2)) col2
from t1 full outer join t2 on(t1.col1 = -t2.col1)
group by isnull (t1.col1,t2.col1)
;
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33106051
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
vybegallo
Прежде чем начинать раздачу призов и бонусов и требовать от других отсутствия синтаксических ошибок, желательно научится правильно формулировать задачу.
Если Вы решили задать свой вопрос в Проектировании, а не на специализированном форуме, то принимайте ответы как есть. Кстати. Ваш вариант с CASE выдаст синтаксическую ошибку на СУБД, которые поддерживают только ANSI-SQL.

Да и Ваш детский восторг в заглавном постинге по поводу решения элементарной задачи просто смешон.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33106053
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
vybegallo. *=* НЕ оракловский синтаксис. Вы бы почитали что-нибудь по SQL.
MS SQL 6.5 поддерживал =, *=,=*,*=*, но не поддерживал никаких JOIN вообще.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33106077
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cat2vybegallo
Прежде чем начинать раздачу призов и бонусов и требовать от других отсутствия синтаксических ошибок, желательно научится правильно формулировать задачу.
Если Вы решили задать свой вопрос в Проектировании, а не на специализированном форуме, то принимайте ответы как есть. Кстати. Ваш вариант с CASE выдаст синтаксическую ошибку на СУБД, которые поддерживают только ANSI-SQL.

Да и Ваш детский восторг в заглавном постинге по поводу решения элементарной задачи просто смешон.

Какую часть предложения "Чем универсальней (в плане СУБД) тем лучше" вы не понимаете ? И какая из реальных СУБД (Oracle, MS SQL, Informix, DB2, Sybase, Mysql ) не понимает "case" ?
Ну и увидеть "детский восторг" в начальном постинге - это хорошая, качественная трава.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33106144
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vybegalloПрежде чем обсуждать оптимальность, желательно написать запрос, не выдающий синтаксических ошибок.Если это претензия ко мне, то извините, что предложенный вариант не поняла IQ, с точки зрения ANSI вариант был синтаксически правильный. А еще IQ... :)
Кстати, вариант все равно был с червоточинкой, приблизительно на подобных же данных, что и Ваш.
vybegalloНу такая уж у меня попалась невменяемая СУБД, что select from (select) не понимает. Не она одна такая непонятливая, кстати - и Informix 7, и DB2 7.1 (насчет 8 не помню) тоже не понимают таких вариантов.Ну так CREATE VIEW они поддерживают ? Про select from (select) вообще речи нет, что Вы на этом варианте-то зациклились... vybegalloК сожалению, Sybase IQ почему-то не понимает и Outer join on (1=0). так что дополненная и исправленная версия selecta будет (при условии что col1 положительно, что с ключами как правило и бывает)Тупой он какой-то, этот IQ :) Тогда уж так
Код: plaintext
1.
2.
3.
select isnull (t1.col1,t2.col1) col1,
sum(isnull (t1.col2, t2.col2)) col2
from t1 full outer join t2 on (t1.col1 = -t1.col1 AND t1.col1 <>  0 )
group by isnull (t1.col1,t2.col1)
Это все-таки не зависит от исходных данных. Только не говорите, что он и этот вариант не переварит :) Кстати, на практике обычно применяю ключи с отрицательного минимума, так что Ваше допущение о положительных ключах на ранг правила претендовать не может.
Cat2Спокойно :) Не надо шума, а вот обещанный любопытный SELECT так и не был представлен широкой публике. Или действительно лучше создать новый топик ? Хотя есть подозрения, что перлы будут завалены массой флуда...

P.S. Кстати, сталкивался с заменой UNION на FULL JOIN и наоборот, даже показалось, что это возможно всегда, пока не столкнулся с ситуацией, где эквивалентная замена оказалась невозможной.
P.P.S. И все-таки сложно представить СУБД, где реализация FULL JOIN оптимальнее UNION...
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33106175
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ChA
Тупой он какой-то, этот IQ :) Тогда уж так
Код: plaintext
1.
2.
3.
select isnull (t1.col1,t2.col1) col1,
sum(isnull (t1.col2, t2.col2)) col2
from t1 full outer join t2 on (t1.col1 = -t1.col1 AND t1.col1 <>  0 )
group by isnull (t1.col1,t2.col1)
Это все-таки не зависит от исходных данных. Только не говорите, что он и этот вариант не переварит :)

"Папа, ви будете смеяться, но ваша дочь опять умерла !" (С)

isnull (t1.col1,t2.col1) col1,
sum(isnull (t1.col2, t2.col2)) col2
from t1 full outer join t2 on(t1.col1 = -t1.col1 and t1.col1 = 0)
group by isnull (t1.col1,t2.col1)
;
col1 col2
----------- ----------------------------

(0 rows affected)

ChA
P.S. Кстати, сталкивался с заменой UNION на FULL JOIN и наоборот, даже показалось, что это возможно всегда, пока не столкнулся с ситуацией, где эквивалентная замена оказалась невозможной.

Пример ?

ChAP.P.S. И все-таки сложно представить СУБД, где реализация FULL JOIN оптимальнее UNION...

Имейте терпение, Штубинг - скоро дойдет дело и до планов ...
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33106193
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vybegallo"Папа, ви будете смеяться, но ваша дочь опять умерла !" (С)
...
(0 rows affected)Нда, это уже диагноз. Как-то своеобразно IQ понимает FULL JOIN или у него оптимизатор больной... Хорошо, а так
Код: plaintext
1.
2.
3.
select isnull (t1.col1,t2.col1) col1,
sum(isnull (t1.col2, t2.col2)) col2
from t1 full outer join t2 on (t1.col1 = t1.col1 +  1 )
group by isnull (t1.col1,t2.col1)
? Хрен c ним, с переполнением на максимуме...
vybegalloПример ?Давно было, года два-три назад, сейчас даже и не припомню, если только случайно...
vybegalloдойдет дело и до планов...Да какие уж тут планы :) И вообще, здесь, скорее, уже статистика, ЦПУ, сканы, риды и прочая мутотень...
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33110581
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ChA vybegallo"Папа, ви будете смеяться, но ваша дочь опять умерла !" (С)
...
(0 rows affected)Нда, это уже диагноз. Как-то своеобразно IQ понимает FULL JOIN или у него оптимизатор больной... Хорошо, а так
Код: plaintext
1.
2.
3.
select isnull (t1.col1,t2.col1) col1,
sum(isnull (t1.col2, t2.col2)) col2
from t1 full outer join t2 on (t1.col1 = t1.col1 +  1 )
group by isnull (t1.col1,t2.col1)
? Хрен c ним, с переполнением на максимуме...
vybegalloПример ?Давно было, года два-три назад, сейчас даже и не припомню, если только случайно...
vybegalloдойдет дело и до планов...Да какие уж тут планы :) И вообще, здесь, скорее, уже статистика, ЦПУ, сканы, риды и прочая мутотень...

Ну, как и ожидалось, вариант t1.col1=t1.col1+1 тоже не сработал. Я думаю, оно в условии Join понимает только столбцы и только соединяемых таблиц. Вдобавок пришлось от ключа bigint перейти к ключу char(32) и вариант с минусом тоже на прокатил. Перешел на view.
Вообще, этот Sybase IQ - забавная штука. На сложных запросах, говорят, летает как реактивный, при достаточно примитивном не cost-based оптимизаторе. Падает в среднем раз в день. Книги отсутствуют как класс. Внутренняя структура страниц и индексов нигде не описана. Сертификатов не выдают :-). Индексов штук 6, и можно строить несколько индексов разных типоов на одной колонке. Данные хранит сразу проиндексированными и в упакованном виде, обещают что даже при всех построенных индексах занимаемое место на диске за счет упаковки не превышает размера чистых данных. В общем, сплошная экзотика :-)
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33110679
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vybegalloВ общем, сплошная экзотикаМожет в морг ?
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33110727
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, зачем же сразу в морг. Если оно запрос выполняет за 2 часа, на который DB2 потратило 2 дня - то можно и потерпеть...
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33110746
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vybegalloЕсли оно запрос выполняет за 2 часа, на который DB2 потратило 2 дня - то можно и потерпеть...Сугубая заточка под OLAP ?
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33110781
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да. Вплоть до монопольного доступа на запись к таблице. Звездообразная схема поддерживается автоматически - указываешь для столбца число возможных значений (cardinality) и после чего хоть char(300) его описывай - хранить будет только 1-2-4 байта.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33112879
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
vybegallo. Уже не понимаю смысла топика. Есть проблемы - в соответсвующий форум. Но скорее тут попытка показать свою крутизну, которой на самом деле не оказалось. Мы так и не увидели Вашего супер-пупер решения задачи для всех sql-серверов и народов. Если я его не увижу в течении суток, то топик будет закрыт.
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Суммирование таблиц - задачка по SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]