Sub-sub-select

Михаил
Дата: 05.11.2008 00:44:48
Привет,

очередной ламерский вопрос по Ораклу.

В двойном сабселекте не проходит связь со внешней таблицей.
Я хочу для каждой строки внешей таблицы вычислить некоторое значение по связанной.
Если вложенность одинарная то условие WHERE работает.
А при двойной (как мне надо) уже нет:

SELECT d.name,
(
SELECT * FROM
(
SELECT AVG(f.num) FROM f WHERE f.id = d.id
)
)
FROM d

Как мне заставить WHERE работать?

Я упростил содержание запроса, конечно...
dmidek
Дата: 05.11.2008 00:55:15
Да, слишком далеко, не видно...
Сначала надо обосновать необходимость суб суб селекта.
В данном примере ее не видно. Ведь Select * не несет никакой
новой информации по сравнению с SELECT AVG

Догадываюсь, что ноги растут из дневного примера с сортировкой.
Если это так , то обратите внимание на замечание Elic о применении
FIRST/LAST.
RA\/EN
Дата: 05.11.2008 03:59:42
Где-то такой принцип может подойти...
SELECT   t1.id,
         (select COLUMN_VALUE dummy
            from (select s
                    from (SELECT 2 id, 'One' s FROM dual UNION
                          SELECT 1 id, 'Two' s FROM dual)
                          t2
                   where t2.id = t1.id)
         ) as ddd
    from (  select 1 ID from dual UNION select 2 ID from dual) t1
Elic
Дата: 05.11.2008 08:23:06
RA\/EN
Где-то такой принцип может подойти...
Уж сколько раз твердили миру: inline view не может быть коррелированным.
RA\/EN
Дата: 05.11.2008 16:58:57
Elic,

тьфу ты блин, фигню скопипастил... Меньше гамаццо надо :)
На самом деле может - меньше догматизма!
Connected to Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 
Connected as u1
 
SQL> create or replace type table_of_varchar as table of varchar2(2000 char);
  2  /
 
Type created
 
SQL> 
SQL> SELECT   t1.id,
  2           (select COLUMN_VALUE dummy
  3              from TABLE(CAST(MULTISET(
  4                    select s
  5                      from (SELECT 2 id, 'One' s FROM dual UNION
  6                            SELECT 1 id, 'Two' s FROM dual)
  7                            t2
  8                     where t2.id = t1.id
  9                   )AS table_of_varchar))
 10           ) as ddd
 11      from (  select 1 ID from dual UNION select 2 ID from dual) t1
 12  /
 
        ID DDD
---------- --------------------------------------------------------------------------------
         1 Two
         2 One
 
SQL> 
SQL> SELECT   t1.id,
  2           (select COLUMN_VALUE dummy
  3              from TABLE(CAST(MULTISET(
  4                    select s
  5                      from (SELECT 2 id, 'One' s FROM dual UNION
  6                            SELECT 1 id, 'Two' s FROM dual)
  7                            t2
  8                     where t2.id = (select *
  9                                      from TABLE(CAST(MULTISET((
 10                                             select t1.id from dual
 11                                           ))AS table_of_varchar)))
 12                   )AS table_of_varchar))
 13           ) as ddd
 14      from (  select 1 ID from dual UNION select 2 ID from dual) t1
 15  /
 
        ID DDD
---------- --------------------------------------------------------------------------------
         1 Two
         2 One
 
SQL> 
RA\/EN
Дата: 05.11.2008 17:00:32
Только помидорами с надписями "грязным читерам от возмущенной общественности" не кидайте, ага?