mysql - 如何在连接中获取单个记录?

标签 mysql sql greatest-n-per-group

我有一个名为 fixtures 的表包含此结构:

id | comp_id  | round_id | 
 1     10         11          
 2     10         12         
 3     10         11          

我只想得到一个“round_id”的所有结果,所以最终结果应该是:1、3或2

我做了这个查询:

SELECT *
 from fixtures f 
  LEFT 
  JOIN rounds r 
    ON r.id = (SELECT MIN(id) FROM rounds WHERE id = f.round_id)
WHERE comp_id = 10

但这将返回所有可用的赛程记录,我只需要返回单轮的赛程,但我不知道编号。

-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `rounds` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `round_id` INT NULL,
  `season_id` INT NOT NULL,
  `name` VARCHAR(255) NULL,
  `link` VARCHAR(255) NULL,
  PRIMARY KEY (`id`),
 ENGINE = InnoDB;

最佳答案

仅选择具有灯具中使用的最小回合ID的灯具(而不是回合中的最小id) code>,因为这可能不会在 fixtures 中使用!)。

SELECT *
       FROM fixtures f
       WHERE f.round_id = (SELECT min(ff.round_id)
                                  FROM fixtures ff);

如果您还想要其中的回合数据(我无法判断您的查询中是否有联接,因为您想要回合数据,或者这只是由于您尝试过滤),您可以加入 rounds.

SELECT *
       FROM fixtures f
            INNER JOIN rounds r
                       ON r.id = f.round_id
       WHERE f.round_id = (SELECT min(ff.round_id)
                                  FROM fixtures ff);

当然 min() 可以替换为其他合适的函数(例如 max()),或者您可以想出一个完全不同的想法如何获得fixtures 中的一个 round_id 可供使用。重要的是,它必须是一个 ID,并且必须在 fixtures 中使用。

关于mysql - 如何在连接中获取单个记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50775872/

相关文章:

mysql - 查询需要 0.0005 秒,但是当用作子查询时,它将选择增加到 2.+

用于比较历史表中列中的当前值和先前值的 SQL 查询

mysql - 在 SQL 中使用 AND 和 OR 查询搜索类别

MySQL:优化组查询中的最大行

php - 在 SQL 中查找给定日期的最高温度

javascript - 无法弄清楚如何显示仅具有相同值的表数据

PHP fatal error : require_once(): Failed opening required

php - MySQL/PHP : Multiple AND/OR tags in SELECT from two tables

sql - 有没有办法在不卸载的情况下完全重置 SQL Server 实例?

sql - Postgres根据时间戳选择不同的