2016-07-11 36 views
1

と一致し、最低のIDを持つテーブルからすべての行:SQLを選択し、私はそうのようなテーブルを持っている

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

は常に最低 order_id値を返しますMySQLの中にこれを行う方法は、あります行この場合、最初の2行が返されます。最初の2行が存在しない場合は、3〜5行(注文ID 357の合計3行)が返されます。

これを行う方法?

答えて

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を与えます。
  • tablealias tとの間にinner joinを入れてください。 order_id
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 
3

集約関数は、クエリのHAVING句で使用することができますので、あなたは、すべての行を取得することができるはず使用をorder_idHAVING句のMIN関数を使用して最低のorder_id値と一致します。

SELECT * FROM table 
HAVING order_id = MIN(order_id) 
+0

かなり簡単でわかりやすい。それを書くには、明確な思考プロセスが必要です。 –

+0

テーブルが空の場合でも空の結果が返されますか?ここで愚かな質問を申し訳ありません...笑 –

+1

@SolomonClosson - 私は確信していません、ドキュメントを見つけるために少し掘り下げて、私は今、 'HAVING'が実際に' GROUP BY 'コンテキストであり、これはMySQLが非厳密なSQLクエリを可能にする例です(これは実際には当てはまりませんが、完全にSQLに準拠しているかもしれませんが、確かめるための確かなソースは見つかりません)。通常の非厳密なコンテキストではmysqlで有効な答えです(より厳密なコンテキストを考えるときは最も理想的な答えではないかもしれません)。 – Anthony

関連する問題