如何:SQL查询 - 在辅助表上使用LIMIT 1 INNER JOIN?

时间:2014-11-13 23:29:44

标签: mysql sql join inner-join limit

我有一个带有两个表的SQL数据库。

一个存储有关不同赌场的信息'在我的游戏中,另一个是'用户'表

每个赌场记录都有ownerID,对应单个用户ID

我抓住赌场表中的每一行,并使用内部联接来获取有关所有者用户信息的信息,如下所示;

SELECT *
FROM casinos 
INNER JOIN users 
ON casinos.ownerID = users.ID

这很好,但由于每个赌场只有1个所有者,我想知道是否有可能LIMIT加入用户只能尝试在用户表中选择1行(用于优化) )。

感谢。

注意:ID个用户是一个int列,是表的主键。

2 个答案:

答案 0 :(得分:1)

在DB2上,我们可以对查询执行LATERAL连接,并在该查询中将连接限制为单行:

SELECT *
FROM casinos 
CROSS JOIN LATERAL (
  select   users.*
  from     users 
  where    users.ID = casinos.ownerID
  order by [some_column_that_prioritizes_best_row_to_choose]
  fetch    first row only 
) as users_one_row_only_per_casinos_row

我使用那种技术很多,当我有多行可供选择并且只想从JOIN返回一行时,它非常有用。

如果/当你需要做这种事情时,在MySql和Lateral Join上进行谷歌搜索,我预计你会找到关于如何在MySql中做同等事情的帖子。

答案 1 :(得分:0)

这没有意义。它是主要的关键,你加入了。您将始终从users表中获得每个赌场一行。而且没有什么可以优化的。如果您遇到性能问题,请考虑在casinos.ownerId上创建一个索引,如果您还没有这样做的话。