sql - 如何避免在连接两个表时出现重复

标签 sql join db2 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

即使使用Disticnt,结果也是A的2倍。我的预期结果将只有一个A。如果我将row_number()over()删除为rownum,它的工作效果很好。为什么会这样呢?如何解决。我正在使用DB2!

最佳答案

标记表中有两行,id为1,标记=50。因此,对于学生表中的每一行,您将在输出中得到两行...
如果只想要一个,则必须进行分组

 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

关于sql - 如何避免在连接两个表时出现重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8099747/

相关文章:

SQLite:使用 COUNT 和 GROUP BY 加速 SQL 语句

mysql 查询搜索 View 时速度缓慢

sql - 在交互式impala-shell session 中执行SQL文件

sql - 加速 SQL Server 中的临时表联接

sql - ISDATE 相当于 DB2

sql - 如何在 SQL 中的一行中连接多行?

sql - 如何显示 DB2 SQL UDF 的源代码

sql - 无法理解此 SQL 代码

MySQL - 获取具有 "user-contact"的用户数

mysql - 从两个表中查找最近的最大购买日期