如何避免重复加入两个表

zod*_*zod 3 sql db2 join row-number

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
Run Code Online (Sandbox Code Playgroud)

使用disticnt后,该结果是A的2倍.我的预期结果将只有一个A.如果我删除row_number()over()作为rownum它工作正常.为什么会这样?如何解决.AM使用DB2 !!

Cha*_*ana 5

标记表中有两行,其中id = 1,mark = 50 ..因此,您将在学生表中的每一行的输出中获得两行...如果您只需要一行,则必须执行一个组By

 SELECT std.id, std.name, m.mark, row_number() 
  over() as rownum 
 FROM student std 
    JOIN marks m 
       ON m.id=std.id AND m.mark=50 
 Group By std.id, std.name, m.mark
Run Code Online (Sandbox Code Playgroud)


sce*_*eaj 5

现在您已经将您的问题澄清为:

我想找到至少一门科目得分为 50 分的所有学生。我会使用查询:

SELECT student.id, '50'
FROM student 
WHERE EXISTS (SELECT 1 FROM marks WHERE marks.id = student.id AND marks.mark = 50)
Run Code Online (Sandbox Code Playgroud)

这也使您能够灵活地更改标准,例如至少有一个分数为 50 或更低。