powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Correlated nested sql query in select statement
22 сообщений из 22, страница 1 из 1
Correlated nested sql query in select statement
    #32110843
sdba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hello,
Prosu proshenia za translit.

Ne mogu reshiti problemu s sql zaprosom, rabotaiushim na ms sql servere, no vidaiushim oshibku na oracle (8i). V zaprose ispolizuetsea vlojennii select zapros sviazannii s glavnim po znaceniu nekotorih polei:

select A.ID, (select Max(B.SomeField) from B where B.ID=A.ID) as Test
from A


Oracle vidaet oshibku:
(select max(B.SomeField)
*
ERROR at line 4:
ORA-00979: not a GROUP BY expression

Vkliucenie group by A.ID ne pomogaet.

V cem tut problema?
Spasibo.
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32110865
klavs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
во вложенном запросе выбирается только 1 поле ( max() )
или просто запрос сокращен для наглядности ?
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32110879
sdba7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1 pole - max.
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32110905
sdba7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bila dopusena malenikaia netocinosti.
Visheupomeanutaia query rabotaet. No, esli pomimo nested query esti drugie aggragatnie functsii, vidaetsea oshibka.

primer zaprosa:

select A.ID, Max(A.Field), (select Max(B.SomeField) from B where B.ID=A.ID) as T
from A
group by A.ID

Oracle vidaet oshibku:
(select max(B.SomeField)
*
ERROR at line 4:
ORA-00979: not a GROUP BY expression

Pole T ne mogu dobaviti v group by - vidaet oshibku invalid column name.

Cito delati?
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32110910
klavs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй :

select c.id,c.t,c.FIELD from (
select A.ID,A.Field, (select Max(B.SomeField) from B where B.ID=A.ID) as T
from A ) c
group by c.ID, c.T ,c.FIELD

в селект можно указывать те поля, по которым делается группировка (явно, не в агрег. функциях)
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32110914
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Inline-query Oracle стал поддерживать с версии 8i, если не ошибаюсь. Можешь переписать свой запрос:

Код: plaintext
1.
2.
3.
4.
5.
select a.id
     , max(b.somefield)
from a, b
where a.id = b.id (+)
group by a.id
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32110923
sdba7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Idea interesnaia, no zameti cito v etom sluchae ne vipolniaetsea Max(A.Field)...
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32110926
sdba7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ese odin minus etogo metoda - outer joins v oracle baziruiutsea na odnom pole/tablitse. Dlea outer joins osnovannih na neskolikih tablitsah rabotati ne budet.
Naprimer:

select a.id
, max(b.somefield)
from a, b, c
where a.id = b.id (+) and c.c_id=b.c_id(+)
group by a.id
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32110929
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял, где тебе требуется Max(A.Field)? По крайней мере в первом вопросе он не упоминался.
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32110942
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"select c.id,c.t,c.FIELD from (
select A.ID,A.Field, (select Max(B.SomeField) from B where B.ID=A.ID) as T
from A ) c
group by c.ID, c.T ,c.FIELD "


Мне кажется эта порочная практика использовать запрос в списке столбцов скоро вообще разучит народ писать правильные запросы. Уже не в впервый раз замечаю в последнее время подобные запросы.
Такое ощущение, что народ сразу садиться на 9i с ничего или оттуда где это уже давно используется.
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32110955
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ispol'zui OVER PARTITION clause...
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32111021
sdba7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Privet Softbuilder.

Pocemu porocinaia? Inogda eto edinstvennii vihod. Oracle k sojaleniu, buduci liderom na db rinke, ne podderjivaet prostie veshi (takie kak OUTER JOIN po neskolikim poliam i tablitsam). I ne vsegda esti vozmojnosti pisati stored procedures (sistemnie trebovania, ponimaesh). Vot i prihoditsea vikrucivatisea.
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32111035
sdba7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pomogite togda napisati sleduiushii zapros pravilino:

Dlea tablits a i b vivoditsea maximum polea iz tablitsi c, a takje maximum polea iz tablitsi d sviazannoi s a i b po nekotorim poleam, ili null esli ne sushestvuiet sviazannih zapisei v tablitse d.

select a.id, b.id, max(c.value),
(select max(d.value) from d where d.a_id=a.id and d.b_id=b.id)
from a, b,
where a.some_field=b.another_field and c.a_id=a.id
group by a.id, b.id

Kak takoe napisati pravilino?
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32111041
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
create table a(id number, some_field varchar2(100));
create table b(id number, another_field varchar2(100));
create table c(id number,val number);

select a.id, b.id, max(max_c) , max(max_c)
from a, b, (select d.id, d.val max_c from d ) c
where a.some_field=b.another_field and c.id=a.id and c.id=b.id
group by a.id, b.id
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32111046
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to sdba7:

это для исходного запроса.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select
   a.id, a.a_max, b.b_max
 from
   (select id, max(field) a_max  from a  group by id) a,
   (select id, max(some_field) b_max  from b  group by id) b
  where
   b.id = a.id(+);


Чем плох этот запрос?
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32111047
sdba7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi Xpert,

Vash zapros ne javliaetsea vneshnim soedineniem. V etom to i problema - mne nujen OUTER JOIN po dvum poliam iz raznih tablits... a Oracle eto nevozmojno.

Cito to vrode etoi query:

select a.id, b.id, max(max_c) , max(max_c)
from a, b, (select d.id, d.val max_c from d ) c
where a.some_field=b.another_field and c.id=a.id(+) and c.id=b.id(+)
group by a.id, b.id

Naskoliko ja znaiu oracle ne vipolnit etot zapros...
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32111052
sdba7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To softbuilder:

Da, zapros neploh (dlea ishodnogo).
A cito je delati v vtorom sluchae - outer join po neskolikim tablitsam i poliam?
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32111055
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот этот запрос я не понял. Есть ссылка на c, но где она from ?
Код: plaintext
1.
2.
3.
4.
5.
select a.id, b.id, max(c.value), 
(select max(d.value) from d where d.a_id=a.id and d.b_id=b.id) 
from a, b, 
where a.some_field=b.another_field and c.a_id=a.id 
group by a.id, b.id 


Изложи задачу точнее
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32111061
sdba7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Horosho, poprobuiu ese raz:

Esti cetire tablitsi A, B, C , D.

1) vivesti Max(C.Value) sgrupirovav po A.ID i B.ID
2) vivesti Max(D.Value) dlea zapisei sviazannih s A.ID i B.ID, ili NULL, esli takih zapisei net -> t.e. eto OUTER JOIN
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32111107
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select a.id, b.id, max(max_c) , max(max_c)
from a, b, (select d.id, d.val max_c from d ) c
where a.some_field=b.another_field and c.id=a.id(+) and c.id=b.id(+)
group by a.id, b.id
rabotaet!
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32111110
sdba7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Xpert,

Ja navernoe opecatku dopustil. Tvoi primer rabotaet, a s etim usloviem (dve tablitsi k odnoi) rabotati ne budet:

where a.a_id=c.a_id(+) and b.b_id=c.b_id(+)

V etom sluchae odna tablitsa (c) ucastvuet vo vneshnem soedinenii s a i b (dve tablitsi). Takoe rabotati ne budet.
...
Рейтинг: 0 / 0
Correlated nested sql query in select statement
    #32111111
sdba7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kstati, komu interesno.
Zapros ja v kontse kontsov domuchal, esli nado viloju.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Correlated nested sql query in select statement
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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