减去SQL查询

时间:2012-03-02 02:55:07

标签: php mysql sql

这是一个快速的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)

2 个答案:

答案 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中已有的表格。