Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.01.10;
Скачать: [xml.tar.bz2];

Вниз

любопытное поведение union all в SQL через BDE...   Найти похожие ветки 

 
WildWind   (2001-12-07 10:48) [0]

Динамически формирую запрос. Получаю:

select nt, count(*) as cnt, sum(pr) as sum_pr, sum(sm)/100 as sum_sm
from "base_1.dbf" a
where (a.nt=4200)
group by nt
union all
select nt, count(*) as cnt, sum(pr) as sum_pr, sum(sm)/100 as sum_sm
from "base_2.dbf" a
where (a.nt=4200)
group by nt
order by nt

Мало того, что этот диалект требует, чтобы where был именно
после from (т.е. до group и order), так он еще и обрабатывается хитро!
По идее (и, например, в FoxPro так и есть) должна получиться одна строка, где nt=6044200 и дальше как заказывали. Но эта гадина выдает количество строк столько, сколько раз будет union all (в данном примере - две). Т.е. при включении в запрос еще одной базы по union я получаю уже 3 строки. Грешил на count(*), но дело не в нем.

Как победить, чтобы не делать промежуточную базу?
Хотя скорее всего так и придется... :(


 
Desdechado   (2001-12-07 11:23) [1]

BDE тут ни причем. Это совершенно правильное поведение, описанное в стандарте SQL. А вот Fox использует (придумал?) какой-то недоSQL со своими приколами


 
WildWind   (2001-12-07 13:25) [2]

Вот она, сила привычки... ;)

Значит в лоб никак? Надо промежуточную базу создавать?


 
Alexandr   (2001-12-07 15:03) [3]

2 строки и должно быть
хочешь одной строкой (т.е. объединить однаковые стери слово all, остальное оставь) и будет тебе счастье


 
asafr   (2001-12-07 16:13) [4]

Действительно, используй не UNION ALL, а просто UNION


 
WildWind   (2001-12-07 17:49) [5]

Убирал я ALL из UNION... а счастья так и нет.

Похоже, что Desdechado прав, но уж больно неуклюжая конструкция выходит. Как-то нелогично...


 
Dim666   (2001-12-07 18:01) [6]

А ты его в такую штуку оберни:


SELECT DISTINCT *
FROM (



)

:)


 
WildWind   (2001-12-10 09:35) [7]

2Dim666
Эта мысль была у меня самой первой ;)
Изящно, но не работает! :(



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.01.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.003 c
3-28404
Romul
2001-12-07 13:16
2002.01.10
Поле типа Boolean в DBF-файле


6-28524
Алексей Штыков
2001-10-16 14:38
2002.01.10
Как втихую проверить обновления (любые) с сервера.?


4-28562
Andrews
2001-11-09 11:35
2002.01.10
Каким шрифтом отображется меню


3-28415
Romul
2001-12-07 13:00
2002.01.10
Поле типа Boolean в DBF-файле


14-28537
T2
2001-11-14 02:48
2002.01.10
Multimedia Tools for D5





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский