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”更多的类型怎么办?