在多个条件下使用左连接 SQL

Using left join with multiple conditions SQL

我正在尝试制作一个应用程序来显示所有其他未登录用户或登录用户未关注的用户(如探索页面),但我在编写SQL查询。

我的表格设置为:

following(username1, username2)

(表示用户名 1 在用户名 2 之后)

users(username, fullname, ...)

现在我正在尝试做类似的事情:

SELECT * FROM
users u 
LEFT JOIN following f ON (
  u.username != 'loggedInUser'
  AND f.username1 = 'loggedInUser'
  AND f.username2 = u.username
)

我在 Python 脚本中替换了 loggedInUser

不幸的是,此查询目前正在返回我的所有用户,但不应该。由于某种原因,我在处理这个逻辑时遇到了很多问题,有没有人有一些见解?

这将显示不是 logged in user 和(不是或)logged in user 不关注(他们)的所有其他用户:

SELECT * 
FROM users u 
WHERE u.username <> 'loggedInUser'
    AND NOT EXISTS (
            SELECT 1
            FROM following f
            WHERE f.username1 = 'loggedInUser'
                AND f.username2 = u.username
        );

您的查询可以更改为 INNER JOIN 以获得预期结果,但它可能更复杂且性能更差:

SELECT DISTINCT u.* 
FROM users u 
INNER JOIN following f 
ON f.username1 <> 'loggedInUser'
    OR f.username2 <> u.username
WHERE u.username <> 'loggedInUser';
SELECT * FROM
users u 
LEFT JOIN following f ON u.[insert_primary_key_here]=f.[insert_foreign_key_here] 
WHERE u.username != 'loggedInUser'
AND f.username1 = 'loggedInUser'
AND f.username2 = u.username

如果您需要获取所有未被登录用户关注的用户,只需尝试以下脚本。

SELECT * FROM
users u 
where u.username in(select username2 from following where username1!= 'loggedInUser')
and u.username!='loggedInUser'

你为什么不简单地在用户中创建一个位类型的新列,当任何用户登录时都会更新。然后你只需要编写一个简单的查询

Select * 来自 loggedIn=1

的用户

这将 return 您所有具有登录状态的用户数据