AWS Redshift SQL 使用查询结果执行另一个查询
Posted
技术标签:
【中文标题】AWS Redshift SQL 使用查询结果执行另一个查询【英文标题】:AWS Redshift SQL using the results of a query to execute another query 【发布时间】:2018-09-10 17:43:32 【问题描述】:我有一张有描述的表格。我正在使用基于作者 ID 的查询来查找相关描述。我使用此代码:
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 中。任何帮助表示赞赏。
【问题讨论】:
【参考方案1】:您可以使用 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
【讨论】:
【参考方案2】:我认为您可以在where
子句中使用and
条件:
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;
【讨论】:
以上是关于AWS Redshift SQL 使用查询结果执行另一个查询的主要内容,如果未能解决你的问题,请参考以下文章
何时通过 AWS Glue ETL 使用 Amazon Redshift 频谱来查询 Amazon S3 数据