使用SQL比较不同表之间的数据

时间:2015-03-26 02:19:03

标签: mysql sql

以下是实验室问题,所以请不要发布直接答案,而应指出我的逻辑过程的哪一部分是错误的

鉴于以下表格

导演(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
  1. 该人既是导演(p.id = d.id),也是角色的演员(p.id = r.id) ,和

  2. 这个人扮演角色的电影不是这个人指导的电影(r.title&lt;&gt; d.title)&#34;

  3. 我的逻辑或语法有什么问题吗?现在我回来了7个名字,但显然正确的结果只有3个名字

1 个答案:

答案 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。