2017-09-10 5 views
0

私はDB2を使用しています。複数行でselect文を発行

状況:自分のテーブルに対してクエリを実行したいRELATION 1とRELATION 2または3が割り当てられているすべての企業を一覧表示するには私のDB設計では、1つ以上の企業が複数の関係を持つことができます。

SQLを使用して同じ列(RELATION)に複数のAND演算子を含むSELECT文を実行したいが、コードを実行するとヒットしない。

SELECT R_ID, COMPANY_NAME from RELATION 
WHERE COMPANY_GROUP = 2245 
AND RELATION = 1 
AND RELATION in (2,3) 

私はこれを実行するとヒットしません。

これは私のDB設計です。

***これは、テーブルRELATION

R_ID, RELATION, COMPANY_NAME 
121 1   Inbev 
122 6   Jupiler 
123 1   Unox 
124 2`   Unox 
125 4   Lotus 
126 1   Lu 
127 1   Felix 
128 2   Felix 
129 1   Unicoresels 
130 3   Unicoresels 
131 4   Sporkamt 

です***これは、これは私がクエリを達成したい結果であるテーブルCOMPANY

COMPANY_ID, COMPANY_NAME, COMPANY_ADDRESS, COMPANY_GROUP 
31   Jupiler  Some address  2245 
32   Unox   Some address  2245 
33   Lotus   Some address  2245 
34   Lu   Some address  2245 
35   Felix   Some address  2245 
36   Unicoresels Some address  2245 
37   Sporkampt  Some address  2245 

です。

R_ID, COMPANY_NAME 
123 Unox 
124 Unox 
127 Felix 
128 Felix 
129 Unicoresels 
130 Unicoresels 

どうすればいいですか?

+2

= 1の関係を有している行同時に2または3を持つことはできません。 – jarlh

答えて

1

一つのアプローチgroup byhavingを使用することです:

SELECT COMPANY_NAME 
FROM RELATION 
WHERE RELATION IN (1, 2, 3) 
GROUP BY COMPANY_NAME 
HAVING SUM(CASE WHEN RELATION = 1 THEN 1 ELSE 0 END) > 0 AND 
     SUM(CASE WHEN RELATION IN (2, 3) THEN 1 ELSE 0 END) > 0 ; 

注:

  • あなたが会社のグループによってフィルタリングする場合は、あなたが会社のテーブルに参加する必要があります。
  • 関係表は、COMPANY_NAMEではなく、COMPANY_IDを使用する必要があります。

EDIT:

もし一致RELATIONテーブルからの行の場合は、単純な方法は、サブクエリとして上記を使用することである。

SELECT r.* 
FROM RELATION r 
WHERE r.COMPANY_NAME IN (SELECT r2.COMPANY_NAME 
         FROM RELATION r2 
         WHERE r2.RELATION IN (1, 2, 3) 
         GROUP BY r2.COMPANY_NAME 
         HAVING SUM(CASE WHEN r2.RELATION = 1 THEN 1 ELSE 0 END) > 0 AND 
           SUM(CASE WHEN r2.RELATION IN (2, 3) THEN 1 ELSE 0 END) > 0 
         ); 
関連する問題