2012-03-02 107 views
0

這是一個'請你的朋友加入這個組'腳本的快速sql查詢。減號SQL查詢

我有2個表:用戶和group_members。我試圖做一個查詢,選擇我的所有朋友 - 以第一個選擇爲代表 - 並從第二個選擇代表的用戶中減去已經表示的用戶和組的一部分的所有朋友。

我不斷收到語法錯誤,不知道爲什麼。當我運行本身每次選擇查詢,它正確地顯示我的所有朋友的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

那你的語法錯誤是什麼? – 2012-03-02 02:56:38

+0

這裏是: #1064 - 你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第2行 – user1011713 2012-03-02 02:58:09

回答

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 
) 
+0

Yup的'MINUS SELECT a.uid,a.name_f,a.name_l,a.profile_pic,a.location FROM users'處使用正確的語法做到了。非常感謝! – user1011713 2012-03-02 03:03:20

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

+0

我將不得不嘗試一下。非常感謝。 – user1011713 2012-03-02 03:03:55