简体   繁体   English

如何交叉两个联合查询

[英]How to Intersects two Union queries

Hello I have Two Queries 你好,我有两个查询

One is 一个是

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'

Its gives Me userids 41,38,61,62,64 它给了我用户ID 41,38,61,62,64

Second Is 第二是

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

It gives me 61,49,62 它给了我61,49,62

I want result userid they are not in Both Results Ie:49,41,38,64,38 我想要结果用户ID他们不在两个结果中:49,41,38,64,38

How can i do that 我怎样才能做到这一点

Try with this query: 尝试使用此查询:

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

Give your first results (the union) an alias of A, Give your second results an alias of B, 给你的第一个结果(联合)一个A的别名,给你的第二个结果别名为B,

Then you can do : 然后你可以这样做:

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

try this 试试这个

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

Take UNION ALL between first result (the one with join ) and second result. 在第一个结果(带连接的结果)和第二个结果之间取UNION ALL So that the duplicate values persists. 这样重复的值仍然存在。 Now use GROUP BY to find non repeating ids . 现在使用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

I don't know your database engine. 我不知道你的数据库引擎。 However as JOIN are common among all, I hope following code will work for you 但是,由于JOIN在所有人中都很常见,我希望以下代码能为您提供帮助

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

In case you are using MySQL then you have to search a workaround for FULL OUTER JOIN 如果您使用MySQL,则必须搜索FULL OUTER JOIN的变通方法

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM