2016-11-18 2 views
0

может кто-нибудь написать этот запрос без каких-либо подзапросов (SQL, системы баз данных)переписать запрос в SQL

SELECT 
    title 
FROM 
    Movies AS Old 
WHERE 
    year < ANY (
     SELECT 
      year 
     FROM 
      Movies 
     WHERE 
      title = Old.title 
); 

Что запрос делает это находит более ранние версии одного и тот же заголовок

(примечание: это исходит из соотношения Movies(title, year, length, genre, studioName, producer))

я пытался, но я не могу достичь этого:

SELECT title 
FROM Movies Old 
Where Old.title = Old.title and Old.year < [year] 
+1

почему бы вам не дать ему попробовать, и кажется, что вы придумали? – jdigital

+0

Что должен сделать этот запрос? Если данные 'Movies' не имеют повторяющихся значений' title', тогда этот запрос не будет возвращать данные. – Dai

+1

создайте свой собственный запрос и, если он столкнется с ошибкой запроса sql, опубликуйте созданный запрос. – GNMercado

ответ

0

Если вы не хотите использовать запрос Sub можно соединить таблицу на себя:

SELECT Old.title, Old.Year, New.Year 
FROM Movies AS Old 
INNER JOIN Movies AS New ON Old.Title = New.Title 
WHERE Old.Year <> New.Year 
+0

Извините, это неверный запрос – venkat

+0

, в котором вы используете DB eingine? – cyclington

+0

Попробуйте теперь, пожалуйста, я забыл добавить префикс Alias – cyclington

0

Попробуйте это:

SELECT old.title,old.year 
FROM Movies AS OLD 
INNER JOIN Movies AS New ON Old.Title = New.Title 
WHERE Old.Year < New.Year 
0
SELECT old.title,old.year FROM Movies AS OLD INNER JOIN Movies AS New ON Old.Title = New.Title WHERE DATEDIFF(Year,Old.Year,New.Year) < 0 
0

Попробуйте это:

SELECT old.title AS title, MIN(old.year) AS olderyear 
FROM Movies AS old 
INNER JOIN Movies AS new ON old.Title = new.Title 
GROUP BY old.title 

Например, в MySQL:

id year title 
----------------- 
1 2013 a 
2 2015 a 
6 2016 a 
9 2014 a 
3 2014 b 
4 2016 b 
8 2010 b 
5 2014 c 

результаты:

title olderyear 
-------------- 
a 2013 
b 2010 
c 2014 
Смежные вопросы