这是一个快速的SQL查询,用于“邀请您的朋友加入此群组”脚本。
我有2个表:users和group_members。我正在尝试进行一个查询,选择我的所有朋友 - 由第一个选择代表 - 并从已经代表的用户和该组的一部分中减去我的所有朋友 - 由第二个选择代表。< / p>
我一直收到语法错误,不知道为什么。当我自己运行每个选择查询时,它会正确显示我所有朋友的uid(使用第一个查询)以及组成员的所有uid(使用第二个查询)
(SELECT a.uid, a.name_f, a.name_l, a.profile_pic, a.location FROM users a, friends b WHERE a.uid = b.friend_two AND b.friend_one = $VAR
MINUS
SELECT a.uid, a.name_f, a.name_l, a.profile_pic, a.location FROM users a, group_members m WHERE m.teamid = 95 and a.uid = m.userid)
答案 0 :(得分:3)
MySQL不支持MINUS
。您通常可以通过使用NOT IN
子查询来重新创建它。这可能会起到作用:
SELECT
a.uid,
a.name_f,
a.name_l,
a.profile_pic,
a.location
FROM users a, friends b
WHERE a.uid = b.friend_two AND b.friend_one = $VAR
AND a.uid NOT IN (
SELECT subuser.uid FROM users subuser, group_members m WHERE m.teamid = 95 AND subuser.uid = m.uid
)
答案 1 :(得分:2)
您可以使用子查询:
SELECT a.uid, a.name_f, a.name_l, a.profile_pic, a.location
FROM users a, friends b
WHERE a.uid = b.friend_two
AND b.friend_one = $VAR
AND a.uid NOT IN (
SELECT a.uid FROM users a, group_members m
WHERE m.teamid=95 AND a.uid=m.userid)
了解您的第二个查询是如何成为AND a.uid NOT IN (second_query)
的一部分?
事实上,我认为你甚至可以在没有子查询的情况下这样做:
SELECT a.uid, a.name_f, a.name_l, a.profile_pic, a.location
FROM users a
JOIN friends b ON a.uid = b.friend_two
JOIN group_members m ON a.uid=m.userid
WHERE b.friend_one = $VAR
AND m.teamid != 95
这只是将所有表格连接在一起,选择具有相应b.friend_one
的表格,并筛选出m.teamid
中已有的表格。