【发布时间】:2015-11-08 14:47:09
【问题描述】:
我会尽量简化。
我是 SQL 新手,我需要提供 3 个 SELECT 语句来做同样的事情,一个是 IN,另一个是 INNER JOIN,最后一个是 EXISTS。通常我能够弄清楚如何去做,但困扰我的是这个请求,因为我必须从一张桌子跳到另一张桌子,而它们之间没有相同的“链接”。
假设我有这 3 个表及其属性:
[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”,然后跳转到“电影”,这样我才能同时获得起始日期和电影名称。我知道我可以使用“Channel”和“Schedule”之间的“link”“name_channel”以及“Schedule”和“Movie”之间的“link”“num_movie”,我只是不知道如何将其写为 IN , INNER JOIN 和 EXIST 请求。
唷,我希望我的问题很清楚。根据我对这些请求的理解,这是我会做的:
对于 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 做到这一点......
我希望我以正确的方式提出了这个问题。对不起,如果不是这样。
非常感谢任何能帮助我理解这一切的人,我脑子里一片混乱:)
【问题讨论】:
标签: sql oracle select inner-join