在同一年寻找具有高清版和DVD版的电影

时间:2015-10-18 18:31:12

标签: sql

所以我有一个表格摘录,如下所示:

Title         Type     Year   Rating
-------------------------
Interstellar  DVD   2014    8.4
Interstellar  HD    2014    8.4
12 Angry Men  DVD   1969    8.9
The Pianist   HD    2001    8.1
The Pianist   DVD   2001    8.1
Dragon Ball Z HD    2011    8.4
Dragon Ball Z DVD   1999    8.3

我想检索同年发行的DVD和HD的所有标题。 所以,我想要获得Interstellar,The Pianist而不是Dragon Ball Z,因为HD和DVD版本在不同年份发布。

我设法通过连接表来实现,但是可以在没有任何连接的情况下完成吗?

2 个答案:

答案 0 :(得分:5)

您可以使用INTERSECT

SELECT Title, Year
FROM your_table
WHERE Type = 'DVD'
INTERSECT
SELECT Title, Year
FROM your_table
WHERE Type = 'HD';

LiveDemo

如果只需要使用标题使用子查询:

SELECT Title
FROM( SELECT Title, Year
      FROM your_table
      WHERE Type = 'DVD'
      INTERSECT
      SELECT Title, Year
      FROM your_table
      WHERE Type = 'HD') as t

LiveDemo2

另一种可能性是使用EXISTS和相关子查询:

SELECT Title
FROM your_table m1
WHERE Type = 'DVD'
  AND EXISTS (SELECT 1 
             FROM your_table m2 
             WHERE m2.Title = m1.Title
               AND m2.Type = 'HD'
               AND m2.Year = m1.Year);

LiveDemo3

答案 1 :(得分:0)

您可以使用GROUP BY执行此操作:

SELECT Title, Year
FROM mytable
GROUP BY Title, Year
HAVING MIN(Type) <> MAX(Type)

假设只有两个可用的Type'HD''DVD',则上述查询会识别与这两种类型相关的Title, Year对。

如果有更多类型可用,则HAVING变得有点复杂:

HAVING COUNT(CASE WHEN Type = 'DVD' THEN 1 END) <> 0 AND
       COUNT(CASE WHEN Type = 'HD' THEN 1 END) <> 0

输出:

Title           Year
-----------------------
The Pianist     2001
Interstellar    2014