2013-08-21 5 views
0

У меня есть задание, с которым у меня возникают проблемы, поскольку это для моих исследований, я был бы признателен, если бы вы не дали мне ответ прямо, а вместо этого дал мне подсказки (я не хочу обманывать).Применение нескольких условий SQL?

У меня есть три стола: фильмы, звезды и акты. Я хочу получить фильмы. Некоторым актерам (в данном случае, Кэмерон Диаз), но я хочу показать ее ПОСЛЕДНИЙ фильм. Таким образом, в основном существуют два условия: состояние имени и год выпуска.

Я очень близко к нему, но я застрял в жизненно важной части. Если я применяю условия отдельно, они работают, но мне нужно иметь все это в одном утверждении. Это то, что я до сих пор.

SELECT M.Title, M.Yearreleased 
FROM Movies M NATURAL JOIN Stars S NATURAL JOIN ActsIn A 
WHERE Yearreleased = (SELECT MAX(Yearreleased) FROM Movies) 

Это отобразит фильмы, выпущенные в последний год. Если я поменять условие WHERE этого утверждения с:

WHERE S.Familyname = 'Diaz' 

я буду получать все фильмы Кэмерон Диаз действовали в

Я попытался следующие кодовые комбинации, которые я думал, что будет работать:.

SELECT M.Title, M.Yearreleased 
FROM Movies M NATURAL JOIN Stars S NATURAL JOIN ActsIn A 
WHERE Yearreleased = (SELECT MAX(Yearreleased) FROM Movies) AND S.Familyname = 'Diaz' 

Мои результаты по этому запросу были буквально пустым столом.

Все, что я думаю, мне нужно, это для вас, ребята, дать мне подсказку о том, как я могу присоединиться к этим двум условиям в одном утверждении. СПАСИБО! Дайте мне знать, если вам нужны примеры данных или скрипку

UPDATE

Я думаю, что я, возможно, решил это, хотя я его полной аварии, может быть, вы могли бы объяснить мне, почему это работает? Вопрос:

SELECT M.Title, M.Yearreleased 
FROM Movies M 
     NATURAL JOIN Stars S 
     NATURAL JOIN ActsIn A 
WHERE Yearreleased = (SELECT MAX(Yearreleased) 
         FROM Movies M 
           NATURAL JOIN Stars S 
           NATURAL JOIN ActsIn A 
         WHERE S.Familyname = 'Diaz') 

AND S.Familyname = 'Diaz' 

Это выводит последний фильм, выпущенный Кэмерон Диаз.

+0

Вы должны использовать группу по запросу, где он выбирает Макс из даты фамилии.Это не обязательно должен быть вложенным запросом. –

+0

Каково ваше сообщение об ошибке, хотя есть много способов сделать это, но для того, чтобы узнать из вашей ошибки, вам нужно разобрать, что является вашим сообщением об ошибке, и позволяет другим объяснять для u =) –

+0

Вы можете положить предложение AND между такими условиями, как: WHERE column1 = 'x' AND column2> 100 –

ответ

1

так я объясню здесь, возьмите пример ниже в качестве образца, первый раз ур природа присоединиться как ниже

Выборочные данные

Table A 
A.Yearreleased | A.col2 
A.data1  | A.data2 

Table B 
B.col 1  | B.Familyname 
B.data1  | B.data2 

после присоединиться к

Table AB 
A.Yearreleased | A.col2 | B.col 1  | B.Familyname 
A.data1  | A.data2| NULL  | NULL 
NULL   | NULL | B.data1  | B.data2 

так здесь вы пытаетесь найти A.data1 AND B.data2 в вашем состоянии, но в вашей таблице нет таких записей, поэтому нет результата return

2-й раз у выполнить объединение с условием (еще не достаточно собственно, он все еще может быть улучшить> <), ваш стол, как показано ниже

Table AB 
A.Yearreleased | A.col2 | B.col 1  | B.Familyname 
A.data1  | A.data2| B.data1  | B.data2 

с 2-го улучшения запроса, у возможность получить ур данные =)

надеюсь, что мое объяснение может помочь у понять, что ваша ошибка, развеселить

+0

О, ладно, я тебя понимаю. Так что я должен попробовать и улучшить свой запрос, или вы думаете, что он работает нормально. Я не уверен, будут ли учителя отмечать меня за неэффективный код. Спасибо за быстрый ответ – user1330649

+0

Устойчивый, если это школьный проект, я считаю, что ваш лектор не будет проверять ваш код, пока нет проблем с производительностью, ха-ха, но для вашего будущего это хорошо, что вы можете улучшить свой запрос =) ps: пожалуйста, отметьте меня, если вы чувствуете, что я помог вам =) –

+0

Да, я полагаю. Спасибо, спасибо. Я отметил тебя. – user1330649

Смежные вопросы