SQL从表中选择匹配最低ID的所有行

时间:2016-07-11 05:20:04

标签: php mysql

我有这样的表:

    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(订单号357共计3行)。

怎么做?

3 个答案:

答案 0 :(得分:3)

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

HAVING

答案 1 :(得分:2)

请试试这个:

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,并为其指定别名t
  • 现在在inner join和此table之间设置alias t order_id

答案 2 :(得分:1)

试试这个:

select *
from yourtable
where order_id in (
    select order_id from yourtable order by order_id ASC limit 1
)

或使用join

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