SQL subquerying问题。无法进一步细化查询结果

时间:2015-03-25 06:20:54

标签: mysql sql sql-server

假设有一组表:(所有表中的所有列名称都相同)

  • movie_award {title,award,result(" won"或" nominated")}
  • writer {id,title}
  • person {id,first_name,last_name}

我无法找出一个SQL查询:"列出所有只为获奖电影编写脚本的作家。"。

因此,任何为一部没有获奖的电影而写的作家,即使该作家都有获奖电影也不包括在内。

像维恩图一样:

作家只有未获奖的电影||两个作家都有|| 作家只获得电影

我可以得到,不确定是否在正确的轨道上:

SELECT DISTINCT p.first_name, p.last_name, w.title
FROM writer w, person p, movie_award ma
WHERE w.id = p.id AND w.title = ma.title AND ma.result = 'won'

然而,这只会让那些在某个时间赢得奖项的作家和电影回归。它并不限制所有电影都获奖的作家。

我愿意接受不同的选择,谢谢!

2 个答案:

答案 0 :(得分:1)

你可以使用WHERE NOT EXISTS clause,如下所示:

SELECT DISTINCT p.first_name, p.last_name, w.title
FROM writer w, person p
WHERE w.id = p.id
AND NOT EXISTS (SELECT * FROM writer w2, movie_award ma
                WHERE w2.id = w.id AND w2.title = ma.title AND ma.result <> 'won')

答案 1 :(得分:0)

尝试使用如下查询:

    SELECT p.first_name,
           p.last_name,
           w.title
    FROM   movie_award m
    INNER JOIN writer w
            ON m.title = w.title
               AND m.result = 'won'
    INNER JOIN person p
            ON w.id = p.id