我试着让这个变得简单。
我是SQL的新手,我有一种情况需要提供3个SELECT语句做同样的事情,一个用IN,另一个用INNER JOIN,最后一个用EXISTS。通常情况下,我可以弄清楚如何去做,但这是困扰我的请求,因为我必须从一张桌子跳到另一张桌子而没有相同的#34;链接"他们之间。
所以,让我说我有这三个表及其属性:
[Channel] name_channel, URL_channel, company_channel
[Schedule_Channel] name_channel, num_movie, starting_date
[Movie] num_movie, name_movie
请求是显示播放电影“吸血鬼”的每个频道的名称,网址和公司。 2015年11月1日之后。
我的问题是,我如何跳出桌子'频道'到' Schedule_Channel'然后去电影'所以我可以同时获得starting_date和电影名称。我知道我可以使用"链接" ' name_channel'在'频道'之间和'日程安排'和#34;链接" ' num_movie'在' Schedule'之间和电影',我根本不知道如何把它写成IN,INNER JOIN和EXIST请求。
p,我希望我的问题很明确。根据我对这些要求的理解,我会做的就是:对于IN:
SELECT name_channel, URL_channel, company_channel
FROM Channel
WHERE name_channel IN (SELECT name_channel from Schedule_Channel WHERE starting_date > to_date('20151101 00:00:00','YYYYMMDD HH24:MI:SS'))
AND name_channel IN (SELECT name_channel FROM Schedule_Channel WHERE num_movie IN (SELECT num_movie FROM Movie WHERE name_movie = 'Dracula'));
对于INNER JOIN:
SELECT c.name_channel, c.company_channel, c.URL_channel
FROM Channel c
INNER JOIN Schedule_Channel s
ON c.name_channel = s.name_channel
INNER JOIN Movie m
ON s.num_movie = s.num_movie WHERE s.starting_date > to_date('20151101 00:00:00','YYYYMMDD HH24:MI:SS') AND m.name_movie = 'Dracula';
我不知道如何为EXIST做这件事......
我希望我以正确的方式提出这个问题。对不起,如果不是这样的话。
非常感谢任何可以帮助我理解这一切的人,我脑子里一团糟:)
答案 0 :(得分:0)
如果我理解正确,你需要使用EXISTS
编写相同的查询应该是这样的:
SELECT c.name_channel, c.company_channel, c.URL_channel
FROM Channel c
where EXISTS (
select * from Schedule_Channel s where s.name_channel = c.name_channel
and s.starting_date > to_date('20151101 00:00:00','YYYYMMDD HH24:MI:SS')
and EXISTS (select * from Movie m
where m.num_movie = s.num_movie
and m.name_movie = 'Dracula'
))
答案 1 :(得分:0)
试试这个:
proc sql;
select a.* from channel a,schedule_channel b, movie c
where a.name_channel=b.name_channel and b.num_movie=c.num_movie
and b.starting_date>to_date('2015-11-01','yyyy-mm-dd')
and c.name_movie='Dracula'