sql - Postgres : filter out some results with join

标签 sql postgresql

我正在尝试构建 SQL 查询(我正在运行 postgres)以过滤掉一些帖子:

比方说,我有用户模型(id、名称等...)、黑名单模型(带有 id、user_id、blacklisted_user_id)和帖子模型(id、author_id、标题等) .

假设用户 A(id=5) 屏蔽了用户 B(id=10)。

用户 A 和 B 都不应该看到他们的帖子。 我正在尝试使用看起来像某事的查询。像这样:

SELECT posts.* FROM "posts" 
LEFT JOIN blacklists b ON (b.user_id = posts.author_id OR 
                           b.blacklisted_user_id = posts.author_id)
WHERE (b.user_id = 5 AND b.blacklisted_user_id = posts.author_id) OR
      (b.user_id = posts.author_id AND b.blacklisted_user_id = 5)

但是,结果与我需要的完全相反:我只收到来自黑名单用户的帖子。

当我使用 b.user_id != 5 时,我得到的响应是空的。

最佳答案

你在重复 blacklisted_user_id=posts.author_id 这是不必要的。

然后,您可能想要不符合黑名单的帖子。像这样的东西:

SELECT posts.* FROM posts 
LEFT JOIN blacklists b ON (b.user_id = posts.author_id OR 
                           b.blacklisted_user_id = posts.author_id)
WHERE posts.author_id = 5 AND b.user_id IS NULL

这是你想要的那种东西吗?

关于sql - Postgres : filter out some results with join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14749595/

相关文章:

sql - 按开放金额比例分配

php - 将 mysql 查询转换为与 postgresql 一起使用

python - 如何将 PostgreSQL 查询结果传递给 Airflow 中的变量? (Postgres Operator 或 Postgres Hook)

java - 将 BLOB 文件从本地插入数据库

mysql - knex JS mysql 中出现错误 "res.json is not a function"

mysql - 必须声明标量变量

sql - 计算两天的价差

sql - 查询查找未通过所有给定科目的学生

java - sql中的参数化插入/更新

mysql - 有什么方法可以检查mysql中是否有一个表有我想要的字段名?