Доступ к полю в подзапросе SQL - PullRequest
4 голосов
/ 18 апреля 2011

У меня довольно сложный запрос, в котором я работаю с несколькими вложенными слоями запросов. Одним из требований запроса является то, что я обращаюсь к полю из подзапроса подзапроса в основном запросе. Однако из-за агрегатов в среднем запросе я не могу включить поле в этот запрос.

например.

select a, d.x, f.v?
from b
  join (select a, max(z), min(z), Count(y) as x
        from c
          join (select a, Count(t) as v
                from e
               ) f 
            on f.a = c.a
            Group By a
            Having min(z) <> max(z)
       ) d 
     on d.a = b.a

Возможно ли это?

Ответы [ 2 ]

4 голосов
/ 18 апреля 2011

Нет.

Попробуйте вместо этого. По сути, получите необходимые атрибуты по мере продвижения вверх по иерархии (возможно, переименуйте их при необходимости), а затем используйте их.

Select a, d.fa From b
join (select a,f.a fa from c
join (select a from e) f on f.a = c.a
) d on d.a = b.a

У меня еще нет тестовых таблиц .. Если вы видите больше проблем, опубликуйте их здесь.

* Редактировать На основе обновленного вопроса *

Даже здесь логика остается прежней, вам придется либо использовать ...

select a, d.x, d.v?
from b
  join (select a, f.v, max(z), min(z), Count(y) as x
        from c
          join (select a, v
                from e
               ) f 
            on f.a = c.a
            Group By a, f.v
            Having min(z) <> max(z)
       ) d 
     on d.a = b.a

Или, если ваша База данных поддерживает скалярные подзапросы, вы можете получить значение в последнем внешнем Запросе, используя ..

select a, d.x, (select v from e where e.a = b.a) f_v
from b
  join (select a, max(z), min(z), Count(y) as x
        from c
          join (select a, v
                from e
               ) f 
            on f.a = c.a
            Group By a
            Having min(z) <> max(z)
       ) d 
     on d.a = b.a
1 голос
/ 18 апреля 2011

вероятно, будет проще, если вы просто вернете нужную таблицу (например, в нашем случае) в предложение From

SELECT a, 
       d.x, 
       e.v 
FROM   b 
       JOIN (SELECT a, 
                          MAX(z), 
                          MIN(z), 
                          COUNT(y) AS x 
                   FROM   c 
                          JOIN (SELECT a 
                                FROM   e) f 
                            ON f.a = c.a 
                   GROUP  BY a 
                   HAVING MIN(z) <> MAX(z)) d 
         ON d.a = b.a 
       JOIN (SELECT a, Count(t) as v
            FROM e
            GROUP BY A ) e
         ON e.a = d.a 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...