【问题标题】:How to: SQL Query - INNER JOIN with LIMIT 1 on the secondary table?如何:SQL 查询 - 在辅助表上使用 LIMIT 1 进行 INNER JOIN?
【发布时间】:2015-01-11 06:42:25
【问题描述】:

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

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

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

我正在从 Casinos 表中抓取每一行,并使用内部连接来获取有关所有者用户信息的信息,如下所示;

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

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

谢谢。

注意:ID of users 是一个 int 列,是表的主键。

【问题讨论】:

    标签: mysql sql join inner-join limit


    【解决方案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 和横向连接上进行 Google 搜索,我预计您会找到有关如何在 MySql 中进行等效操作的帖子。

    【讨论】:

      【解决方案2】:

      这没有意义。这是主键,你要加入。您将始终从用户表中获得每个赌场的一行。没有什么可以优化的。如果您遇到性能问题,请考虑在 Casinos.ownerId 上创建索引(如果您尚未这样做)。

      【讨论】:

      • 我认为可能是这样,谢谢。但出于好奇,如果它不是主键,或者根本不是任何键,我只想将其限制为 1 行,例如 ID 值最高的行?
      • 手册中有一些很好的例子:dev.mysql.com/doc/refman/5.0/en/…你必须加入这样的查询。
      猜你喜欢
      • 2015-08-01
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      • 2014-03-13
      • 2012-11-04
      • 2015-01-10
      • 2020-06-28
      • 2018-01-27
      相关资源
      最近更新 更多