首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL选择表中ids最小且匹配的所有行

SQL选择表中ids最小且匹配的所有行
EN

Stack Overflow用户
提问于 2016-07-11 13:20:04
回答 3查看 104关注 0票数 1

我的表是这样的:

代码语言:javascript
复制
    id  |  order_id  |  product_id
------------------------------------
    1   |  356       |  80
    2   |  356       |  81
    3   |  357       |  77
    4   |  357       |  80
    5   |  357       |  78
    6   |  358       |  90

我希望能够做的是在不知道最初有多少行的情况下获取最低的2个order_id值,但我在思考如何创建查询来选择这些行时遇到了麻烦……

SELECT * FROM table ORDER BY order_id ASC

在MySQL中有没有办法做到这一点,它总是返回order_id值最低的行,所以在本例中,我应该返回前2行。如果前两行不存在,那么我应该返回行3-5(总共3行,订单id为357)。

该怎么做呢?

EN

回答 3

Stack Overflow用户

发布于 2016-07-11 13:27:32

聚合函数可以在查询的HAVING子句中使用,因此您应该能够在HAVING子句中使用MIN函数来获取order_id与最低order_id值匹配的所有行:

代码语言:javascript
复制
SELECT * FROM table
HAVING order_id = MIN(order_id)
票数 3
EN

Stack Overflow用户

发布于 2016-07-11 13:25:45

请尝试以下操作:

代码语言:javascript
复制
SELECT 
*
FROM 
table INNER JOIN 
(
    SELECT MIN(order_id) AS min_order_id
    FROM table
) AS t
ON t.order_id = table.order_id;

  • 首先获取最小订单id并为其指定别名,以便在order_id.

上的table和此alias t之间创建inner join

票数 2
EN

Stack Overflow用户

发布于 2016-07-11 13:25:53

试试这个:

代码语言:javascript
复制
select *
from yourtable
where order_id in (
    select order_id from yourtable order by order_id ASC limit 1
)

或者使用join

代码语言:javascript
复制
select t1.*
from yourtable t1
join (select order_id from yourtable order by order_id ASC limit 1) t2
on t1.order_id = t2.order_id
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38299617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档