2017-09-10 31 views
0

我使用DB2。在多行上發出select語句

情況:我想要在我的表上做一個查詢關係,列出所有具有關聯1和關聯2或3分配的公司。在我的數據庫設計中,一個或多個公司可能有多個關係。

我想做一個SELECT語句,在SQL的同一列(RELATION)上有多個AND運算符,但是如果我執行代碼,我不會得到任何結果。

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

當我執行這個我沒有得到任何命中。

這是我的數據庫設計。

***這是表關係

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_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_ID而不是COMPANY_NAME

編輯:

如果想從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 
         );