2017-09-08 29 views
3

您好,我有兩個查詢怎樣區域相交2聯合查詢

一個是

SELECT userid_one AS id FROM `friends` WHERE `userid_two` = '$UserId' AND `requeststatus` ='accepted' 
        UNION 
SELECT userid_two AS id FROM `friends` WHERE `userid_one` = '$UserId' AND `requeststatus` ='accepted' 

它給了我的用戶ID 41,38,61,62,64

二是

SELECT DISTINCT `userid` FROM `groupmembers` WHERE `groupid` =24 

它給了我61,49,62

我想導致用戶ID,他們不是兩個結果 即:49,41,38,64,38

我如何能做到這一點

+0

什麼DBMS您使用JOIN ? –

回答

0

採取UNION ALL第一個結果(帶有加入),二結果之間。 這樣的重複值仍然存在。現在使用GROUP BY找到非重複ids

SELECT id from 
     (SELECT userid_one AS id FROM `friends` 
     WHERE `userid_two` = '$UserId' AND `requeststatus` ='accepted' 

     UNION 

     SELECT userid_two AS id FROM `friends` 
     WHERE `userid_one` = '$UserId' AND `requeststatus` ='accepted' 

     UNION ALL 

     SELECT DISTINCT `userid` AS id FROM `groupmembers` WHERE `groupid` =24 
     ) A 

     GROUP BY id having COUNT(1)=1 
1

嘗試與此查詢:

select id 
from (your union) 
group by id 
having count(*) = 1 
1

給你第一個結果(工會)A的別名,給你的第二個結果B的別名,

然後,你可以這樣做:

SELECT id 
WHERE ((id IN A) AND NOT (id IN B)) OR (NOT (id IN A) AND (id IN B)) 
FROM (A UNION B) 
0

試試這個

SELECT * FROM (

SELECT userid_one AS id FROM `friends` WHERE `userid_two` = '$UserId' AND `requeststatus` ='accepted' 
        UNION 
SELECT userid_two AS id FROM `friends` WHERE `userid_one` = '$UserId' AND `requeststatus` ='accepted' 

) as t ORDER BY id 
0

我不知道你的數據庫引擎。然而,由於加盟商共同之間的所有,我希望下面的代碼會爲你

SELECT id FROM (
    SELECT userid_one AS id FROM `friends` 
    WHERE `userid_two` = '$UserId' AND `requeststatus`='accepted' 
    UNION 
    SELECT userid_two AS id FROM `friends` 
    WHERE `userid_one` = '$UserId' AND `requeststatus`='accepted' 
) friends_union FULL OUTER JOIN 
    SELECT DISTINCT `userid` AS id FROM `groupmembers` WHERE `groupid` =24 
) group_member ON friends_union.id = group_member.id 
WHERE friends_union.id IS NULL OR group_member.id IS NULL 

工作,如果你正在使用MySQL,那麼你必須尋找一種解決方法FULL OUTER