[英]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.