Учитывая следующее отношение movie {country,major_genre,production_year, run_time, title
, я бы хотел перечислить все страны, кроме Испании, фильмы, созданные в этой стране, при условии, что их не менее двух.SQL In и having-clause, почему они дают разные результаты?
Я написал два запроса, и они каким-то образом дали разные результаты. Кажется, что первый из них правильный, но мне кажется, что они равны. Я изучаю SQL. Может кто-то, пожалуйста, помогите объяснить различия? Спасибо за вашу помощь!
Первый:
SELECT m1.country, m1.production_year, m1.title
FROM movie m1
WHERE m1.country <> "Spain"
AND m1.country
IN (
SELECT m2.country
FROM movie m2
GROUP BY m2.country //select only the ones with at least 2 movies
HAVING COUNT(*) >=2
)
ORDER BY m1.country ASC , m1.production_year DESC
И второе:
SELECT m1.country, m1.production_year, m1.title
FROM movie m1
WHERE m1.country <> "Spain"
GROUP BY m1.country
HAVING COUNT(*) >=2 //the country selected should have count of at least 2 rows
ORDER BY m1.country ASC , m1.production_year DESC
Мой самый первый вопрос, ли вторая работа запрос? – Backtrack
Похож на запрос MySQL, который расслаблен относительно правил, связанных с предложением GROUP BY. FYI, второй запрос неверен, так как вы должны перечислить все столбцы в предложении GROUP BY, которые находятся в списке SELECT. – cha
Я вижу «m1.country, m1.production_year, m1.title» в инструкции select, но в то время как в группе у вас есть только m1.country – Backtrack