选择该用户不是任何人的朋友

eme*_*ieu 0 mysql sql

在此输入图像描述

你好,我有这两个表:用户和朋友(friend_status = 1表示请求已发送,friend_status = 2表示他们是朋友)。现在我想选择所有用户都不是任何人的朋友。怎么做?

假设当前用户是1。我尝试了这个,但似乎是错误的。因为它只显示发送请求但尚未确认的用户。

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
                ) T
                LIMIT 0, 10
Run Code Online (Sandbox Code Playgroud)

Zan*_*ien 5

SELECT
    a.user_id,
    a.name,
    a.email
FROM
    users a
LEFT JOIN
    friends b ON 
        a.user_id IN (b.sender, b.receiver) AND
        b.friend_status = 2
WHERE
    b.friend_id IS NULL
Run Code Online (Sandbox Code Playgroud)

在这里,我们想要LEFT JOIN和表usersfriends条件是用户已发送或接收请求并且友谊被接受。如果用户不满足这两个条件,则连接friends表中的值将为NULL

现在我们想要不符合加入条件的用户,因此我们使用 过滤掉符合条件的用户WHERE b.friend_id IS NULL,这将选择在朋友表中没有任何相应条目的用户(在发送者/接收者字段中)或者有相应的条目,但没有一个具有friend_statusof 2