2011-12-06 61 views
3

我有一組表如下:列表聯合表中的記錄

客戶(cus_id,cus_name)

帳戶(acc_num,acc_balance,bra_code

分支( bra_code,bra_address)

如果我想列出所有c擁有多個賬戶,分支機構和他們的詳細信息的ustomer。 新手入門希望大家可以幫忙。

這是我的任務的一部分,實際上,到目前爲止,我所做的就是這樣的..

SELECT DISTINCT 
     C.CUS_ID, 
     (C.CUS_FIRST_NAME || ' ' || C.CUS_LAST_NAME) AS CUS_NAME, 
     C.CUS_IC, 
     C.CUS_ADDRESS, 
     C.CUS_POSTCODE, 
     C.CUS_CONTACT, 
     C.CUS_EMAIL, 
     C.CUS_AGE,  
     C.CUS_GENDER, 
     C.CUS_STATUS, 
     B.BRA_CODE, 
     B.BRA_ADDRESS, 
     B.BRA_POSTCODE, 
     R.REG_STATE, 
     R.REG_COUNTRY 
FROM CUSTOMER C, ACCOUNT A,BRANCH B, REGION R 
WHERE C.CUS_ID=A.CUS_ID AND 
     A.BRA_CODE=B.BRA_CODE AND 
     B.REG_ID=R.REG_ID AND 
     A.BRA_CODE IN (SELECT A.BRA_CODE 
        FROM CUSTOMER C, ACCOUNT A,BRANCH B 
        WHERE C.CUS_ID=A.CUS_ID AND A.BRA_CODE=B.BRA_CODE 
        GROUP BY A.BRA_CODE HAVING COUNT(A.BRA_CODE)>1) 
GROUP BY 
     C.CUS_ID, 
     C.CUS_FIRST_NAME, 
     C.CUS_LAST_NAME, 
     C.CUS_IC, 
     C.CUS_ADDRESS, 
     C.CUS_POSTCODE, 
     C.CUS_CONTACT, 
     C.CUS_EMAIL, 
     C.CUS_AGE, 
     C.CUS_GENDER, 
     C.CUS_STATUS, 
     B.BRA_CODE, 
     B.BRA_ADDRESS, 
     B.BRA_POSTCODE, 
     R.REG_STATE, 
     R.REG_COUNTRY 
     HAVING COUNT(C.CUS_ID)>1; 
+0

向我們展示您的查詢到目前爲止的樣子 –

+0

嗨,我更新了我的問題,請幫助:) –

+0

+1 for included tabl e結構以及這是Oracle的事實。 –

回答

3

試試這個:

SELECT * 
FROM customer c, account a, branch b 
WHERE c.cus_id IN (
     SELECT a2.cus_id 
     FROM account a2, branch b2 
     WHERE a2.bra_code = b2.bra_code 
     GROUP BY a2.cus_id 
     HAVING COUNT(DISTINCT(b2.bra_code)) > 1 
    ) 
    AND c.cus_id = a.cus_id 
    AND a.bra_code = b.bra_code 
+0

這假設每個客戶在任何一個分支中永遠不會有多個帳戶。 –

+0

@Mark Ba​​nnister你是對的,修復了我的答案 – socha23

2

答案之一可能是這樣的:

SELECT DISTINCT 
     C.CUS_ID, 
     (C.CUS_FIRST_NAME || ' ' || C.CUS_LAST_NAME) AS CUS_NAME, 
     C.CUS_IC, 
     C.CUS_ADDRESS, 
     C.CUS_POSTCODE, 
     C.CUS_CONTACT, 
     C.CUS_EMAIL, 
     C.CUS_AGE,  
     C.CUS_GENDER, 
     C.CUS_STATUS, 
     B.BRA_CODE, 
     B.BRA_ADDRESS, 
     B.BRA_POSTCODE, 
     R.REG_STATE, 
     R.REG_COUNTRY 
FROM CUSTOMER C, ACCOUNT A,BRANCH B, REGION R 
WHERE C.CUS_ID=A.CUS_ID AND 
     A.BRA_CODE=B.BRA_CODE AND 
     B.REG_ID=R.REG_ID AND 
     EXISTS (SELECT NULL FROM ACCOUNT O 
       WHERE A.CUS_ID = O.CUS_ID AND A.BRA_CODE <> O.BRA_CODE)