2017-04-07 74 views
0

我有低於Oracle查詢:Oracle查詢

SELECT 
* 
FROM 
WA_GA_TBL_ACTIVITY A, 
WA_GA_TBL_USERS U 
WHERE 
A.USERID_FK = U.USERID AND 
(A.GROUPID_FK = 'GR0001' OR U.GROUPID_FK = 'GR0001') AND 
A.USERID_FK != 'US0007' AND 
(A.ACTIVITYID) NOT IN(SELECT ACTIVITYID_FK FROM WA_GA_TBL_ACCESSACTIVITY 
WHERE USERID_FK = 'US0007' 

第一個邏輯WA_GA_TBL_ACTIVITY當用戶ID = US0007檢查! 現在我想在NOT IN用戶詳細信息:

NOT IN(SELECT ACTIVITYID_FK FROM WA_GA_TBL_ACCESSACTIVITY 
WHERE USERID_FK = 'US0007' 

當userid_fk = US0007

我想是這樣的:

SELECT 
* 
FROM 
WA_GA_TBL_ACTIVITY A, 
WA_GA_TBL_USERS U 
WHERE 
A.USERID_FK = U.USERID AND 
(A.GROUPID_FK = 'GR0001' OR U.GROUPID_FK = 'GR0001') AND 
A.USERID_FK != 'US0007' AND 
(A.ACTIVITYID) NOT IN(SELECT S.USERID, S.DATEADDED, W.ACTIVITYID_FK FROM WA_GA_TBL_USERS S, WA_GA_TBL_ACCESSACTIVITY 
W 
WHERE S.USERID = W.USERID_FK AND W.USERID_FK = 'US0007') 

遇到錯誤:

ORA-00913: too many values 

樣品數據

表WA_GA_TBL_ACTIVITY

ACTIVITYID | ACTIVITYNAME | USERID_FK | ACTIVITYDATE | GROUPID_FK 
001  | add new user | US0001 | 4/6/2017  | GR0001 

表WA_GA_TBL_USERS

USERID | USERNAME | DATEADDED 
US0001 | testuser1| 4/6/2017 
US0007 | testuser2| 4/6/2017 

表WA_GA_TBL_ACCESSACTIVITY

ACTIVITYID_FK | USERID_FK 

有沒有辦法做到這一點?

+0

'太多值'錯誤是由於您正在使用'NOT IN'與返回多個列的子查詢造成的。至於你實際想要做什麼,那是另一回事。 –

+0

有沒有可能做查詢?也許查詢功能?因爲我需要從NOT IN查詢中獲取用戶的詳細信息 –

+0

您能向我們展示樣本數據嗎?我害怕沒有,我只會在這裏猜測。 –

回答

0

IN子查詢的投影中的列數必須與謂詞引用的數字相匹配。你得到ORA-00913: too many values錯誤,因爲(A.ACTIVITYID)不符合(SELECT S.USERID, S.DATEADDED, W.ACTIVITYID_FK

所有你需要做的是歸屬關係

SELECT 
     * 
FROM 
WA_GA_TBL_ACTIVITY A, 
WA_GA_TBL_USERS U 
WHERE 
A.USERID_FK = U.USERID AND 
(A.GROUPID_FK = 'GR0001' OR U.GROUPID_FK = 'GR0001') AND 
A.USERID_FK != 'US0007' AND 
(A.ACTIVITYID) NOT IN (SELECT W.ACTIVITYID_FK 
         FROM WA_GA_TBL_USERS S, 
          WA_GA_TBL_ACCESSACTIVITY W 
          WHERE S.USERID = W.USERID_FK 
          AND W.USERID_FK = 'US0007') 

好像你可以簡化子查詢到這個

(SELECT W.ACTIVITYID_FK 
    FROM WA_GA_TBL_ACCESSACTIVITY W 
    WHERE W.USERID_FK = 'US0007') 

但你知道你的業務邏輯比我好。