以下是实验室问题,所以请不要发布直接答案,而应指出我的逻辑过程的哪一部分是错误的
鉴于以下表格
导演(id,production_year,title)
person (id,first_name,last_name,year_born)
角色(学分,说明,身份证明,生产年份,标题)
电影(国家,流派,制作年份,运行时间,标题)
问题是"列出所有在非电影导演中扮演角色的导演"
我的尝试是以下
SELECT DISTINCT p.first_name, p.last_name
FROM person p
WHERE EXISTS
(SELECT * FROM role r, director d WHERE p.id = d.id AND p.id=r.id AND r.title <> d.title)
我在想&#34;给定任何人,如果
,则返回该人的first_name和last_name该人既是导演(p.id = d.id),也是角色的演员(p.id = r.id) ,和
这个人扮演角色的电影不是这个人指导的电影(r.title&lt;&gt; d.title)&#34;
我的逻辑或语法有什么问题吗?现在我回来了7个名字,但显然正确的结果只有3个名字
答案 0 :(得分:0)
首先,你的语法是旧式的 - 我好久没见过了。新标准
SELECT * FROM MainTable
INNER JOIN SubTable on SubTable.MainTableId = MainTable.Id
但我认为问题在于你应该更多地说“选择一个导演和IS担任角色的人,但他所处的角色不在(他指导的电影列表中)”。
此外,在现实生活中,此人的ID不太可能与导演的ID相同 - 人员多于演员,并且ID通常在插入时由数据库自动递增。但是,看看你的表,看起来这不是问题,因为你的role.id和director.id都应该重命名为role.personId和director.personId。