您好的朋友,我有這兩個表:用戶和朋友(friend_status = 1表示發送請求,friend_status = 2意味着它們是朋友)。現在我想選擇所有用戶不是特定用戶的朋友。怎麼做?
假設當前用戶是1.我嘗試這樣的SQL。它可以工作,但它太長而且很慢。第一個選擇所有向user1發送請求但未被接受的用戶。第二個選擇所有用戶從user1接收請求。第三和第四個選擇所有用戶不在「朋友」表中。
SELECT user_id, name, email
FROM
(
SELECT user_id, name, email
FROM users u INNER JOIN friends f ON u.user_id = f.sender
WHERE f.receiver = 1 AND friend_status <> 2
UNION
SELECT user_id, name, email
FROM users u INNER JOIN friends f ON u.user_id = f.receiver
WHERE f.sender = 1 AND friend_status <> 2
UNION
SELECT u.user_id, u.name, u.email
FROM users u LEFT JOIN friends f ON u.user_id = f.sender
WHERE f.receiver IS NULL
GROUP BY user_id
UNION
SELECT u.user_id, u.name, u.email
FROM users u LEFT JOIN friends f ON u.user_id = f.receiver
WHERE f.sender IS NULL
GROUP BY user_id
) T
GROUP BY user_id
更新:添加照片。
請在http://www.sqlfiddle.com/上提供一些數據,以便我們測試並回答 –
http://www.sqlfiddle.com/#!2/49302/1 – Emerald214