2017-09-08 3 views
3

Hallo Ich habe zwei AbfragenWie durchteuft zwei Union fragt

One ist

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' 

Sein gibt mir UserIDs 41,38,61,62,64

zweite ist

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

Es gibt mir 61,49,62

ich führen will userid sie sind nicht in beiden Ergebnisse Dh: 49,41,38,64,38

Wie kann ich das tun

+0

Welche DBMS verwenden Sie ? –

Antwort

0

UNION ALL zwischen dem ersten Ergebnis nehmen (das mit join) und der zweiten Folge. Damit die doppelten Werte bestehen bleiben. Verwenden Sie jetzt GROUP BY, um nicht wiederkehrende ids zu finden.

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

mit dieser Abfrage Versuche:

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

Geben Sie Ihr erste Ergebnisse (die Gewerkschaft) ein Alias ​​von A, geben Sie Ihr zweites Ergebnis eine Alias ​​von B,

Dann können Sie tun:

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

versuchen diese

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

Ich kenne Ihre Datenbank-Engine nicht. Doch als JOIN sind unter allen gemeinsam, ich hoffe folgenden Code für Sie Sie verwenden MySQL

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 

Im Fall arbeiten, dann müssen Sie eine Abhilfe für FULL OUTER suchen JOIN