【发布时间】:2020-07-23 12:42:33
【问题描述】:
表名:国家
id country_name
1 USA
2 GERMANY
3 RUSSIA
表名:用户
id user_name points country_id
1 user1 20 1
2 user2 10 2
3 user3 11 2
结果应该是最高分的国家用户,如果没有用户可用,则只有国家(第三条记录),如下所示
country_name user_name points
USA user1 20
GERMANY user3 11
RUSSIA (null) (null)
目前我正在使用以下查询,但有时会花费太多时间,例如当我有 100000 条记录时。
SELECT c.country_name,u.user_name,u.points FROM country c
LEFT JOIN user u on u.country_id = c.id
WHERE (u.points = (SELECT MAX(points) AS points FROM user WHERE user.id = u.id) OR u.points IS NULL)
那么,有没有其他方法可以在时间上更有效地做到这一点。
已经谢谢了!
【问题讨论】:
-
Oracle 标签更具体,所以我猜您使用的是 Oracle。请标记您真正使用的数据库。
-
抱歉,由于堆栈溢出的声誉,无法添加新标签,我使用的是 Oracle Database 12c Enterprise Edition Release 12.1.0.2.0