所以我有一个表格摘录,如下所示:
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版本在不同年份发布。
我设法通过连接表来实现,但是可以在没有任何连接的情况下完成吗?
答案 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