我有一个带有两个表的SQL数据库。
一个存储有关不同赌场的信息'在我的游戏中,另一个是'用户'表
每个赌场记录都有ownerID
,对应单个用户ID
。
我抓住赌场表中的每一行,并使用内部联接来获取有关所有者用户信息的信息,如下所示;
SELECT *
FROM casinos
INNER JOIN users
ON casinos.ownerID = users.ID
这很好,但由于每个赌场只有1个所有者,我想知道是否有可能LIMIT
加入用户只能尝试在用户表中选择1行(用于优化) )。
感谢。
注意:ID
个用户是一个int列,是表的主键。
答案 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上创建一个索引,如果您还没有这样做的话。