2014-01-12 105 views
0

我有兩個表。查找列中的重複項(DB2,SQL)

首先在一個表中持有賬戶(組織)

ID  IK 
1A  1 
2X  2 
3R  3 
4Q  3 
5E  5 
6A  5 
7B  5 
8N  8 
9Z  9 

每個賬戶是一組的部分稱爲IK並具有IK數。相同的數字表示同一個IK組的一部分。有些帳戶是1A組的一部分,如1A,一些IK組有多個成員,如IK 5,其中有3個帳戶作爲成員。

第二個表是帳戶表的擴展表。該表的帳戶ID(org_id)指的是帳戶表

ID  ORG_ID KRB_FLG 
1U  1A  Y 
2O  2X  N 
3K  3R  Y 
4L  4Q  N 
5F  5E  N 
6G  6A  Y 
7H  7B  Y 
8V  8N  Y 
9W  9Z  Y 

在擴展臺的ROW_ID,所述x_krb_flg表示IK組的主(值=「Y」)。所以組織1A是其IK(1)的主要組成部分。 Org 3R是其IK(1-100-10)的主力。每個IK組應至少有一個主要(X_KRB_FLG列中的值「Y」)以及最多1個主要(因此主要是單詞)。

我需要幫助的地方: 我想查找IK組中沒有主要帳戶或擁有多個主要帳戶的帳戶。

我想找到這些賬戶記錄:

  • 2X(在其IK唯一成員,但不是主)
  • 5E(其IK有兩個初選)
  • 6A(其IK有兩個初選)
  • 7B(其IK有兩個初選)
+0

最好給一個實際的結果表,而不只是一個解釋(儘管你給出的是從記錄的角度可以理解的)。你到目前爲止所做的嘗試 - 展示你所做的努力,因爲它會幫助我們更好地理解你的實際需求。 DB2的哪個版本/平臺?我們是否需要對擴展表中的「ID」做任何事情? (爲什麼它們是字母和數字呢?)您是否有任何審計信息,比如'made_primary_on'時間戳(最新值) - 布爾值通常是派生信息。 –

回答

0

試試這個:

WITH T3 AS (
    SELECT T2.*, T1.IK 
    FROM T1 
    INNER JOIN T2 
    ON T1.ORG_ID = T2.ORG_ID 
    WHERE KRB_FLG = 'Y' 
) 
SELECT ORG_ID 
FROM T1 AS T 
WHERE 1 <> (SELECT COUNT(*) FROM T3 WHERE T3.IK = T.IK) 
; 

編輯:Here is a SQLfiddle但語法已更改爲mysql。

+0

這工作!非常感謝 – user2992366