Нужна помощь с некоторыми запросами Oracle SQL - PullRequest
1 голос
/ 12 сентября 2010

Вот вопрос, заданный профессором: найдите минимальную и максимальную продолжительность фильмов, играющих в каждом городе.

А вот как мои таблицы структурированы:

CREATE TABLE Theatres (
Name varchar2(50) not null,
City varchar2(50) not null,
State varchar2(50) not null,
Zip number not null,
Phone varchar2(50) not null,
PRIMARY KEY (Name)
);

CREATE TABLE Movies (
Title varchar2(100) not null,
Rating NUMBER not null,
Length NUMBER not null,
ReleaseDate date not null,
PRIMARY KEY (Title),
CHECK (Rating BETWEEN 0 AND 10),
CHECK (Length > 0),
CHECK (ReleaseDate > to_date('1/January/1900', 'DD/MONTH/YYYY'))
);

CREATE TABLE ShownAt (
TheatreName varchar2(50) not null,
MovieTitle varchar2(100) not null,
PRIMARY KEY (TheatreName, MovieTitle),
FOREIGN KEY (TheatreName) REFERENCES Theatres(Name),
FOREIGN KEY (MovieTitle) REFERENCES Movies(Title)
);

Я пробовал несколько разных запросов, но продолжаю получать проблемы. Вот что у меня есть:

SELECT MIN(Movies.Length), MAX(Movies.Length), Theatres.Name
 FROM Theatres, Movies, ShownAt 
WHERE ShownAt.TheatreName = Theatres.Name AND 
ShownAt.MovieTitle = Movies.Title AND 
Theatres.City IN (SELECT UNIQUE City FROM Theatres);

Кто-нибудь видит что-то не так? Спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 12 сентября 2010

Вы были довольно близки, я думаю.Просто отсутствует GROUP BY

SELECT 
     MIN(Movies.Length) AS Shortest, 
     MAX(Movies.Length) AS Longest, 
     Theatres.City 
FROM Theatres
JOIN ShownAt ON ShownAt.TheatreName = Theatres.Name
JOIN Movies ON ShownAt.MovieTitle = Movies.Title
GROUP BY Theatres.City 
1 голос
/ 12 сентября 2010

Я верю, что это поможет:

SELECT T.City, MIN(M.Length) AS MinLength, MAX(M.Length) AS MaxLength
  FROM Movies   AS M
  JOIN ShownAt  AS S ON S.MovieTitle  = M.Title
  JOIN Theatres AS T ON S.TheatreName = T.Name
 GROUP BY T.City
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...