【发布时间】:2021-01-30 15:31:16
【问题描述】:
第一个查询 q1 给出了想要的结果。 但是查询 q2 给出的一对演员和导演的电影数量过多。
SELECT * FROM
(SELECT pc.PID AS actorID, pc.Name AS Actor, pd.PID AS directorID,pd.Name AS
Director,COUNT(DISTINCT m.MID) count_movie FROM Movie m
JOIN
M_Cast mc ON m.MID = Trim(mc.MID)
JOIN
M_Director md ON m.MID = md.MID
JOIN
Person pc ON Trim(mc.PID) = pc.PID
JOIN
Person pd ON md.PID = pd.PID
WHERE pd.Name LIKE '%Yash%' GROUP BY pc.Name) AS q1
JOIN
(SELECT pc.PID AS actorID,pc.Name Actor,pd.PID AS directorID,pd.Name AS Director, COUNT(DISTINCT
m.MID) count_movie FROM Movie m
JOIN
M_Cast mc ON m.MID = TRIM(mc.MID )
JOIN
M_Director md ON m.MID = md.MID
JOIN
Person pc ON TRIM(mc.PID) = pc.PID
JOIN
Person pd ON md.PID = pd.PID
WHERE pd.Name NOT LIKE '%Yash%' GROUP BY pc.PID) AS q2
ON q1.Actor = q2.Actor ORDER BY q1.count_movie DESC
actorID Actor directorID Director count_movie actorID Actor directorID Director count_movie
0 nm0707271 Jagdish Raj nm0007181 Yash Chopra 11 nm0707271 Jagdish Raj nm0474806 Gulshan Kumar 98
1 nm0471443 Manmohan nm0007181 Yash Chopra 10 nm0471443 Manmohan nm0695153 T. Prakash Rao 39
2 nm0407002 Iftekhar nm0007181 Yash Chopra 9 nm0407002 Iftekhar nm1065099 C.P. Dixit 93
3 nm0534501 Madan Puri nm0007181 Yash Chopra 8 nm0534501 Madan Puri nm0619050 Hiren Nag 94
最右边的movie_count 似乎高得离谱。如果必须匹配答案,则第一行应小于 11。
这里我没有使用上面的 WHERE 条件来显示我的查询错误的地方。 即使我使用 Where 条件
where q1.count_movie > q2.count_movie
我得到的结果是
Name count
0 Sanjeev Kumar 3
1 Sanjeev Kumar 3
2 Sanjeev Kumar 3
3 Sanjeev Kumar 3
4 Ashok Kumar 2
下面的输出是正确的结果。 它将提供 245 行。我只显示 6 行。
Name count
0 Jagdish Raj 11
1 Manmohan 10
2 Iftekhar 9
3 Shashi Kapoor 7
4 Rakhee Gulzar 5
5 Waheeda Rehman 5
给出的表格是
- 电影(MID、标题、年份)
- M_Cast(MID,PID)
- 人员(PID、姓名、性别)
- M_Director(MID,PID)
我是 sql 新手,在调试代码时遇到了很多麻烦。 请帮助我理解逻辑。
【问题讨论】:
-
请提供预期的MRE。显示中间结果与预期结果的偏差。我们应该能够将您的代码块粘贴到文件中,运行它并重现您的问题。
-
“我的问题像死鸭子一样落地,所以我又带着同样的问题回来了,希望这次你喜欢它”不是一个好策略。尝试改进您的问题,以便我们更好地帮助您。
-
特别是,您应该在此处发布之前知道哪些结果是正确的。如有必要,请自行滚动浏览 IMDB 并验证电影数量。 “我认为这是错误的”不是 Stack Overflow 问题:它试图将测试负担转移给我们。
-
我不明白查询的目的。你的标题是“找出所有与 Yash Chopra 合作的电影比任何其他导演都多的演员”。所以,我期待一份演员名单。好的,您显示 Yash Chopra 电影的电影数量(以及不必要的 Yash Chopra 的姓名和 ID)。但是你为什么要给另一个导演看?这是在说“例如这是一个演员少看电影的导演”吗?为什么?你想列出所有演员的其他导演吗?还是挑选样品?目的是什么?
-
您使用的是什么 DBMS?