Student Table
SID Name
1 A
2 B
3 C
Marks Table
id mark subject
1 50 physics
2 40 biology
1 50 chemistry
3 30 mathematics
SELECT distinct(std.id),std.name,m.mark, row_number() over() as rownum FROM
student std JOIN marks m ON std.id=m.id AND m.mark=50
这个结果是2倍的A,即使使用disticnt。我的预期结果将只有一个A。如果我删除row_number()over()作为rownum,它的工作正常。为什么会发生这种情况?如何使用DB2解析. AM!!
3条答案
按热度按时间omtl5h9j1#
marks表中有两行,id = 1,mark = 50..因此,对于student表中的每一行,您将在输出中获得两行...如果您只需要一行,则必须执行group By
3j86kqsm2#
现在,您已将问题澄清为:
我想找出至少有一门科目得分为50分的所有学生。我将使用以下查询:
这也使您可以灵活地更改标准,例如,至少有一个分数为50或更低。
wdebmtf23#
类似于Charles的答案,但您总是希望将 predicate (mark=50)放在WHERE子句中,因此您在连接之前进行了过滤。如果这只是家庭作业,这可能无关紧要,但如果您遇到任何真实的数据,您将需要记住这一点。