2

この選択を作成する方法に完全に行き詰まっています。ステータス テーブルから、ステータス 2 を持たないものだけを選択する必要がありますorder_id

ここに表があります:

+----+---------+---------+--
| id | order_id| status  |
+----+---------+---------+--
|  1 |       1 |       1 | 
|  2 |       1 |       2 | 
|  3 |       2 |       1 | 
|  4 |       2 |       2 |
|  5 |       3 |       1 |
|  1 |       3 |       3 | 
|  2 |       4 |       2 | 
|  3 |       4 |       1 | 
|  4 |       4 |       2 |
|  5 |       5 |       3 | 
+----+---------+----------+--

だから彼は結果を選択するだけですorder_id = 5

助けてください!

ステータス 1 の注文を含め、ステータス 3 の注文を除外する場合は、同様のアイデアを使用できます。

having sum(case when status_id = 1 then 1 else 0 end) > 0 and
       sum(case when status_id = 3 then 1 else 0 end) = 0

編集: 私はそれらの order_id を除外したい:
- ステータス 1 のみ (ステータス 2 ではない)
- および
- ステータス 3 を持つ

次のようなテーブルを用意します。

id--order-id-Prod---Status    
------------------------------  

1   1        a      1  
6   1        b      2  
7   1        a      2  
8   1        b      1  
9   2        a      1  
10  3        a      1  
11  3        b      1  
12  3        a      2  
13  3        b      2  
14  4        a      1  
15  4        b      1  
16  5        a      1  
17  5        b      1  
18  5        a      2  
19  5        b      2  
20  5        a      3  
21  5        b      3  

選択すると、order_id "5" のみが表示されます

4

4 に答える 4

1

別の方法は、次を使用することEXCEPTです。

SELECT order_id
FROM StatusTable

EXCEPT

SELECT order_id
FROM StatusTable
WHERE status = 2;

SQL-Server と Postgres (および を に置き換えれば Oracle でも動作EXCEPTMINUSます)。

于 2013-07-02T20:24:37.320 に答える