Sql 查找同一年发行了HD和DVD的电影

Sql 查找同一年发行了HD和DVD的电影,sql,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 Bal

我有一个表格摘录,看起来像这样:

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的标题。 所以,我想得到星际,钢琴家,但不是龙珠Z,因为它的HD和DVD版本是在不同的年份发布的


我通过连接表来实现这一点,但是否可以在没有任何连接的情况下实现这一点?

您可以使用
INTERSECT

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

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

SELECT Title
FROM( SELECT Title, Year
      FROM your_table
      WHERE Type = 'DVD'
      INTERSECT
      SELECT Title, Year
      FROM your_table
      WHERE Type = 'HD') as t
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);

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

SELECT Title
FROM( SELECT Title, Year
      FROM your_table
      WHERE Type = 'DVD'
      INTERSECT
      SELECT Title, Year
      FROM your_table
      WHERE Type = 'HD') as t
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);

您可以使用
INTERSECT

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

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

SELECT Title
FROM( SELECT Title, Year
      FROM your_table
      WHERE Type = 'DVD'
      INTERSECT
      SELECT Title, Year
      FROM your_table
      WHERE Type = 'HD') as t
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);

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

SELECT Title
FROM( SELECT Title, Year
      FROM your_table
      WHERE Type = 'DVD'
      INTERSECT
      SELECT Title, Year
      FROM your_table
      WHERE Type = 'HD') as t
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);

您可以使用
分组方式

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

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

您可以使用
分组方式

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

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

你用的是哪种关系型数据库?你用的是哪种关系型数据库?谢谢,我最喜欢交集法。它回答了我的问题。谢谢,我最喜欢交叉法。它回答了我的问题。这个解决方案有一个缺陷,如果有比“DVD”和“HD”更多的类型怎么办?这个解决方案有一个缺陷,如果有比“DVD”和“HD”更多的类型怎么办?