как передать значение из основного запроса в подпод вложенный запрос - PullRequest
0 голосов
/ 25 апреля 2019

Я хочу передать переменную из основного запроса в подзапрос. это проблема, так как этот запрос использует 3 подпрограммы.

Я пытался присоединиться, но так как я новичок, это немного сбивает с толку. код примерно такой

select fav.cust_id
from 
(
    select cust_id
    from
    (
        select cust_id
        from
        (
            select c.cust_id
            from customer c
        )
    )
)fav
where fav.cust_id = 12;

как мы видим, я пытаюсь передать значение '12' в самый глубокий подзапрос (c.cust_id), чтобы он возвращал предполагаемые значения в основном запросе. если я попытаюсь передать значение в первом подзапросе, он вернет неправильные данные, так как попытается извлечь все данные из второго подзапроса и далее перед использованием условия. поэтому я пытаюсь передать условие внутри самого глубокого подзапроса, чтобы он отфильтровал результат оттуда и вернул предполагаемые значения.

обновление: вот близкий к реальному запросу, который я сделал.

select fav.cust_lname, fav.cust_time
from
(
    select max(cust_lname), max(cust_time)
    --there is another code here for some calculations
    from
    (
         select lname cust_lname, time cust_time
         --there is another code here for some calculations
         from 
         (
              select c.cust_id
              --there is another code here for some calculations to return the cust_lname and cust_time
              from
              customer c
              where cust_g = 'MALE'
              AND cust_id = --in the original code, this is a parameter. i want this to read the value from the main query
         )
    )       
)fav,
customer_table ct

where ct.header_id = --custom parameter that im trying to play with
AND ct.cust_id = --i want to relate this with the cust_id inside the sub query

Ответы [ 3 ]

0 голосов
/ 25 апреля 2019

из вашего данного запроса,

(
    select max(cust_lname), max(cust_time)
    --there is another code here for some calculations
    from
    (
         select lname cust_lname, time cust_time
         --there is another code here for some calculations
         from 
         (
              select c.cust_id
              --there is another code here for some calculations to return the cust_lname and cust_time
              from
              customer c
              where cust_g = 'MALE'
              AND cust_id = --in the original code, this is a parameter. i want this to read the value from the main query
         )
    )       
)fav

- это запрос в таблице (извлеченные записи служат данными таблицы1)

другая используемая таблица -

customer_table ct

и, согласно вашему коду, это похоже на объединение table1 (fav) со второй таблицей, но оно недоступно в подзапросе.

рассмотрим это ... фрагмент кода, используемый только для table1 ....откуда он будет получать ct.cust_id ???если таблица ct не находится в подзапросе, это приведет к ошибке неверного идентификатора.

согласно вашему заданному коду, вы пытаетесь получить значение fav.cust_lname, fav.cust_time, которые являются значениями из подзапроса, путем объединения с cust_idиз внешнего стола клиента.если это требование, то оно может быть записано как

select (subquery with join from ct table) from customer_table ct

, если вы хотите использовать соединение в самом запросе в таблице

select column1, column2 from (select ....cust_id... from customer_table ctin ...)fav, customer_table ct where...

что-то вроде этого должно бытьвыполнено, т. е. эта соединительная таблица должна вызываться в запросе в таблице со ссылкой на этот столбец

. Главное, что вы использовали запрос в таблице с соединением с внешней таблицей, который недоступен во внутренней таблице.запрос таблицы, либо переключитесь на подзапрос, либо добавьте внешнюю таблицу в запрос таблицы

0 голосов
/ 25 апреля 2019

хорошо, поэтому я узнал что-то новое сегодня.я использовал OUTER APPLY, чтобы передать значение внутри самого глубокого подзапроса, спасибо за все предложения.

select fav.cust_lname, fav.cust_time
from
customer_table ct
outer apply
(
    select max(cust_lname), max(cust_time)
    --there is another code here for some calculations
    from
    (
         select lname cust_lname, time cust_time
         --there is another code here for some calculations
         from 
         (
              select c.cust_id
              --there is another code here for some calculations to return the cust_lname and cust_time
              from
              customer c
              where cust_g = 'MALE'
              AND cust_id = ct.cust_id --match with the column in the outside query table
         )
    )       
)fav,

where ct.header_id = --custom parameter that im trying to play with
--AND ct.cust_id = --i want to relate this with the cust_id inside the sub query --removed this
0 голосов
/ 25 апреля 2019

Запрос можно упростить, как указано ниже.Вам не нужны вложенные подзапросы.

select fav.cust_id
from fav
join b
on b.cust_id = fav.cust_id
join c
on c.cust_id = b.cust_id
WHERE fav.cust_id = 12
...