gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 22:42:28 25 4
gpt4 key购买 nike

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

给出下表

导演(id、制作年份、头衔)

(id、名字、姓氏、出生年份)

角色(制作人员、说明、ID、制作年份、标题)

电影(国家/地区、类型、制作年份、运行时间、标题)

问题是“列出所有在非他们导演的电影中扮演过角色的导演”

我的尝试如下

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)

我在想“给定任何人,返回该人的名字和姓氏,如果

  1. 此人既是导演(p.id = d.id),又是扮演角色的 Actor (p.id = r.id) ,和

  2. 此人所饰演的电影不是此人执导的电影(r.title <> d.title)

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

最佳答案

一方面,你的语法是老式的 - 我已经很久没见过这种语法了。新标准是

SELECT * FROM MainTable
INNER JOIN SubTable on SubTable.MainTableId = MainTable.Id

但我认为问题在于你应该说得更像是“选择一个担任导演并且担任某个角色的人,但他所扮演的角色不在(他导演的电影列表)中”。

此外,在现实生活中,人的 ID 不太可能与导演的 ID 相同 - 人比 Actor 多得多,并且 ID 通常在插入时由数据库自动递增。但是,查看您的表格,这似乎不是问题,因为您的 role.id 和director.id 都应重命名为 role.personId 和director.personId。

关于mysql - 使用SQL比较不同表之间的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29270006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com