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         |  
4

1 回答 1

2

这个问题被称为关系划分的SQL

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

ifpersonrole对于每个movies, 和不是唯一的personname,您需要使用计算唯一值DISTINCT

SELECT  movies,
        personName
FROM    tableName
WHERE   personrole IN ('director','producer','writer')
GROUP   BY movies, personName
HAVING  COUNT(DISTINCT personrole) = 3
于 2013-09-21T11:45:22.580 回答