Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрос на Max значения [D6, MSSQL]


Explorer ©   (2002-07-25 10:11:00) 

Мастера!
Вот запрос:
select max(t.id_registerroub)as roub, max(t1.id_registercur)as cur,
max(t2.id_registercurroub)as curroub
from registerroub t, registercur t1, registercurroub t2

Результат: null null null
Хотя значения там есть. Если делаю запрос на выборку max в одной таблице - все нормально.

Могу ли я, в одном запросе делать такую выборку на max в неск. таб. ?


bahrov   (2002-07-25 12:37:00) [1]

DmitryK ©

на 8i совершенно не обязательно


Explorer   (2002-07-25 12:35:00) [2]

Всем, большое спасибо!


DmitryK   (2002-07-25 12:31:00) [3]

2bahrov

можно, только надо чуток поправить:

select A.m1, B.m2, C.m3 from
(select max(field1) m1 from table1) A,
(select max(field2) m2 from table2) B,
(select max(field3) m3 from table3) C


bahrov   (2002-07-25 11:43:00) [4]

у тебя идет перемножение 3х таблиц и если одна таблица пустая
то ты полюбому получишь пусто! X*Y*0=0
если ты без MAX-ов выполнишь запрос то получишь пусто а какие максы из пусто
Чтобы было хорошо на Oracle было бы так
select m1,m2,m3 from
(select max(field1) m1 from table1),
(select max(field2) m2 from table2),
(select max(field3) m3 from table3)
можно ли на mssql так делать незнаю



AlexSam   (2002-07-25 10:49:00) [5]

Я не поленился и написал аналогичный запрос. Все работает.
Другое дело, если таблицы большие, то SQL перебирает все комбинации = count1*count2*count3 !!! Напиши 3 отдельных запроса и не тр..я. Или ХР с возвращаемыми параметрами.

CREATE PROCEDURE max_
(@max_1 int OUTPUT,@max_2 int OUTPUT,@max_3 int OUTPUT)
AS
SELECT @max_1=(SELECT max(a1) FROM t1)
SELECT @max_2=(SELECT max(b1) FROM t2)
SELECT @max_3=(SELECT max(c1) FROM t3)


Explorer   (2002-07-25 10:29:00) [6]

>IlyaA
Ты меня не понял!
Мне, как раз, нужны разные филды, чтобы работать с ними потом по одиночке.

Еще что я заметил, он выдает NULL, только в том случае, когда по одному из запрашиваемых полей в таб. записей нет!
Почему так?


IlyaA   (2002-07-25 10:18:00) [7]

Нет. Так ты ни чего не получишь. Т.к. при такой выботке у тебя получится лажа.
Попробуй Union-

Select Max(Field1) as Max From Table1
Union
Select Max(Field2) as Max From Table2
Union
Select Max(Field3) as Max From Table3


Тогда получишь таблицу с одним филдом и тремя записями


Наверх

Титульная страница Поиск, карта сайта Написать письмо