Select 与最旧条目匹配的所有条目
Select all entries that match the oldest entry
在 MariaDB / MySQL 我有一个 table 这样的:
table (key1, key2, date)
与 INDEX(key1, key2)
现在我想取最早的条目:
SELECT * FROM `table` ORDER BY `date` ASC LIMIT 1
最后是第一个查询中与 key1
和 key2
匹配的所有条目:
SELECT * FROM `table` WHERE `key1` = ? AND `key2` = ?
能否以某种方式将其简化为一个查询?
只需使用join
:
select t.*
from `table` t join
(select t.*
from `table` t
order by `date` asc
limit 1
) tt
on t.key1 = tt.key1 and t.key2 = tt.key2;
自从 MariaDB 10.2 引入了通用Table表达式以来,可以使用另一种方法来编写此查询。使用 WITH 语法查询如下所示:
WITH t_oldest AS (SELECT * FROM `table` ORDER BY `date` asc LIMIT 1)
SELECT t.* FROM `table` AS t,t_oldest
WHERE t.key1 = t_oldest.key1 AND t.key2 = t_oldest.key2;
在 MariaDB / MySQL 我有一个 table 这样的:
table (key1, key2, date)
与 INDEX(key1, key2)
现在我想取最早的条目:
SELECT * FROM `table` ORDER BY `date` ASC LIMIT 1
最后是第一个查询中与 key1
和 key2
匹配的所有条目:
SELECT * FROM `table` WHERE `key1` = ? AND `key2` = ?
能否以某种方式将其简化为一个查询?
只需使用join
:
select t.*
from `table` t join
(select t.*
from `table` t
order by `date` asc
limit 1
) tt
on t.key1 = tt.key1 and t.key2 = tt.key2;
自从 MariaDB 10.2 引入了通用Table表达式以来,可以使用另一种方法来编写此查询。使用 WITH 语法查询如下所示:
WITH t_oldest AS (SELECT * FROM `table` ORDER BY `date` asc LIMIT 1)
SELECT t.* FROM `table` AS t,t_oldest
WHERE t.key1 = t_oldest.key1 AND t.key2 = t_oldest.key2;