AWS Redshift SQL, используя результаты запроса для выполнения другого запроса - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть таблица с описаниями. Я использую запрос на основе идентификаторов авторов, чтобы найти соответствующие описания. Я использую этот код:

 SELECT
    count(*), h.book_desc
    FROM
    native.authbill p, native.chg h
    where p.book_chg_id = h.book_chg_id
    and 
    (p.aut_key in (
    select aut_key
    from native.authcodes p
    where p.auth_code in (74233, 23421) )
    or p.aut_key in (
    select aut_key
    from native.pubisbn_proc pat
    where isbn_code in ('373423','0256543','0257535')))
    group by h.book_desc

Затем у меня есть другой запрос, который находит описания книг по жанру

SELECT
    count(*), h.book_desc
    FROM
    native.authbill p, native.chg h
    where p.book_chg_id = h.book_chg_id
    and p.genre_code in (
    SELECT distinct chg.genre_code
    FROM native.chgset chg
    where chg.genre_desc in ('Sci-fi', 'Action', 'Rom-com')
                        )

Что я хочу сделать, так это взять все результаты первого запроса и сузить их до второго запроса. Я получаю 150000 результатов из первого запроса и 250000 при запуске второго запроса. Как я могу сузить результаты первого запроса по второму запросу. Поэтому я хочу использовать результаты первого запроса, а затем убедиться, что эти описания также находятся в массиве описания жанра. Это в AWS Redshift SQL. Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Я думаю, вы можете просто использовать условие and в предложении where:

select count(*), h.book_desc
from native.authbill p join
     native.chg h
     on p.book_chg_id = h.book_chg_id
where (p.aut_key in (select aut_key
                     from native.authcodes p
                     where p.auth_code in (74233, 23421)
                    ) or
       p.aut_key in (select aut_key
                     from native.pubisbn_proc pat
                     where isbn_code in ('373423', '0256543', '0257535')
                    )
      ) and
      p.genre_code in (select chg.genre_code
                       from native.chgset chg
                       where chg.genre_desc in ('Sci-fi', 'Action', 'Rom-com')
                      ) 
group by h.book_desc;
0 голосов
/ 10 сентября 2018

Вы можете использовать CTE и соединение для пересечения двух наборов:

with q1 as (
SELECT
    count(*) as cnt, h.book_desc
    FROM
    native.authbill p, native.chg h
    where p.book_chg_id = h.book_chg_id
    and 
    (p.aut_key in (
    select aut_key
    from native.authcodes p
    where p.auth_code in (74233, 23421) )
    or p.aut_key in (
    select aut_key
    from native.pubisbn_proc pat
    where isbn_code in ('373423','0256543','0257535')))
    group by h.book_desc
),
q2 as (
SELECT
    count(*) as cnt, h.book_desc
    FROM
    native.authbill p, native.chg h
    where p.book_chg_id = h.book_chg_id
    and p.genre_code in (
    SELECT distinct chg.genre_code
    FROM native.chgset chg
    where chg.genre_desc in ('Sci-fi', 'Action', 'Rom-com')
                        )
)
select book_desc, q1.cnt, q2.cnt 
from q1 join q2 using book_desc
...