在单个查询中选择两个特定的 mysql 表行

Posted

技术标签:

【中文标题】在单个查询中选择两个特定的 mysql 表行【英文标题】:Selecting two specific mysql table rows in a single query 【发布时间】:2010-05-11 21:57:07 【问题描述】:

假设我有一个包含 20 个条目的表。它们按日期降序排列(日期是列名>_>)。我将如何只选择最新的条目和第 15 个最旧的条目?

我通过执行以下查询得到所有 15 个结果

SELECT * FROM mytable m WHERE col1 = "zzz" ORDER BY date DESC LIMIT 15;

【问题讨论】:

我相信你只能在两个查询中做到这一点,除非你做了一些联合选择魔法。限制 1 和限制 1,15 【参考方案1】:

用途:

SELECT x.*
  FROM (SELECT a.*,
               @rownum := @rownum + 1 AS rank
          FROM mytable a 
          JOIN (SELECT @rownum := 0) r
         WHERE a.col1 = "zzz" 
      ORDER BY a.date DESC) x
 WHERE x.rank IN (1, 15)

【讨论】:

嗯,我收到“未知表 'a'”【参考方案2】:

您可能需要使用两个 SELECT 的 UNION

(SELECT * FROM mytable m WHERE col1 = "zzz" ORDER BY date LIMIT 1, 15)
UNION
(SELECT * FROM mytable m WHERE col1 = "zzz" ORDER BY date DESC LIMIT 1)

更新:

加括号

【讨论】:

你是对的,但是我刚刚添加的括号是有效的 - 只是尝试过

以上是关于在单个查询中选择两个特定的 mysql 表行的主要内容,如果未能解决你的问题,请参考以下文章

如何使用单个查询获取存储在不同变量中的多个表行的计数?

检查 MYSQL 表行中是不是存在特定时间范围

SQL 在单个查询中更新和选择

在单个查询中使用 PHP 连接两个 mysql 表

mysql查询所有表行数

如何从1个表中选择许多行并将其插入另一个表中特定行的特定JSONB字段中?但是在单个原始SQL查询中