2013-09-21 81 views
1

我一整天都在思考这个问题,我似乎无法想出一个解决方案。让我们做一个例子,我有一个表,看起来像这样:如何根据表中的特定条件选择表中的特定行?

| movies | personname | personrole | 
------------------------------------- 
| A  | p1   | director | 
| A  | p1   | producer | 
| A  | p1   | writer  | 
| A  | p1   | actor  | 
| A  | p2   | actor  | 
| A  | p3   | writer  | 
| A  | p3   | producer | 
| B  | p4   | director | 
| B  | p4   | producer | 
| B  | p4   | writer  | 

现在,我想要做的是列出所有的人在这个表是一个导演,制片人,并为电影作家。任何帮助表示赞赏!

This as output: 

| movies | personname | 
----------------------- 
| A  | p1   | 
| B  | p4   | 

回答

2

此问题被称为SQL of Relational Division

SELECT movies, 
     personName 
FROM tableName 
WHERE personrole IN ('director','producer','writer') 
GROUP BY movies, personName 
HAVING COUNT(*) = 3 

如果personrole不是每个movies独一无二的,personname,则需要使用DISTINCT

SELECT movies, 
     personName 
FROM tableName 
WHERE personrole IN ('director','producer','writer') 
GROUP BY movies, personName 
HAVING COUNT(DISTINCT personrole) = 3 
+2

不知道这个问题有一个名字,但是非常感谢!这很好用! –

相关问题