我想执行一个选择请求,然后执行第一次选择,然后使用该选择来执行第二次选择。
我使用临时表制作了第一个版本,但我想知道是否有一种方法可以在没有临时表的情况下完成
我的临时表代码如下:
select dvd_name, book_name , count(*) nb
into #t
from usr
inner join book on usr_book_id = book_id
inner join dvd on dvd_id = usr_dvd_id
group by dvd_name, book_name
having count(*) > 1
select top 10 usr_smthg, #t.book_name,dvd_name
from #t
inner join book b on b.book_name = #t.book_name
inner join usr on usr_book_id = book_id
答案 0 :(得分:2)
您可以为此使用CTE
with t as
(
select dvd_name, book_name , count(*) nb
from usr
inner join book on usr_book_id = book_id
inner join dvd on dvd_id = usr_dvd_id
group by dvd_name, book_name
having count(*) > 1
)
select top 10 usr_smthg, t.book_name,dvd_name
from t
inner join book b on b.book_name = t.book_name
inner join usr on usr_book_id = book_id
答案 1 :(得分:1)
在sql中,您可以使用子查询,如下所示:
select top 10 usr.usr_smthg, t.book_name, usr.dvd_name
from (
select dvd_name, book_name , count(*) nb
from usr
inner join book on usr_book_id = book_id
inner join dvd on dvd_id = usr_dvd_id
group by dvd_name, book_name
having count(*) > 1
) t
inner join book b on b.book_name = t.book_name
inner join usr on usr_book_id = book_id
-- guess
order by n.nb desc
答案 2 :(得分:1)
您可以将窗口函数与子查询一起使用:
select top (10) t.usr_smthg, t.book_name, t.dvd_name
from (select usr_smthg, book_name, dvd_name,
count(*) over (partition by dvd_name, book_name) as cnt
from usr inner join
book
on usr_book_id = book_id inner join
dvd
on dvd_id = usr_dvd_id
) t
where cnt > 1
order by ??;
??
表示基于您想要的top (10)
记录的排序列。