【问题标题】:postgresql: joining 3 tablespostgresql:加入3个表
【发布时间】:2022-01-13 20:32:38
【问题描述】:

*第一篇文章:如果我遗漏了什么,请提前道歉。请告诉我,我会更新!

我正在寻找: 超过 30 天未登录的用户 用户角色不相等的地方(“所有者”、“租户”、“经理”) 并且来源不等于“内部”

我有 3 张桌子

  1. last_login - 有用户登录信息(load_date、current_date、last_login)
  2. 用户 - 有关于用户是外部还是内部的信息(来源)
  3. 角色 - 用户拥有的角色 (role_name)

我必须为我的 WHERE 条件加入 3 个表。当我加入第三张桌子时,我的结果从 300 个结果下降到只有 10 个左右。我检查了表格,我应该得到至少 200 多个结果。 谁能告诉我我的加入有什么问题?

select u.id, u.username
from user as u
join last_login as ll
on u.username = ll.username
join role as r
on ll.username = r.username
where ll.loaddate = ll.current_date - 1
and ll.lastlogin < ll.current_date - 30
and u.source <> 'INTERNAL'
and r.role_name <> ('Owner', 'Renter', 'Manager')

【问题讨论】:

  • 我希望这会产生语法错误。那是你的确切语法吗? role_name 的数据类型是什么?

标签: postgresql join


【解决方案1】:

查看您的查询,我想您应该使用 NOT IN 而不是 。也尝试使用 INNER 或 LEFT JOIN。例如这样的事情:

select u.id, u.username
from user as u
left join last_login as ll
on u.username = ll.username
left join role as r
on ll.username = r.username
where ll.loaddate = ll.current_date - 1
and ll.lastlogin < ll.current_date - 30
and u.source NOT LIKE '%INTERNAL%'
and r.role_name NOT IN ('Owner', 'Renter', 'Manager')

【讨论】:

  • 感谢您的回复~我已经完成了左连接和内连接,并尝试了不喜欢/进入并得到相同的结果。
  • 1) 尝试删除 where 条件。 2) 使用一个 Join 运行查询以找出 GAP 的位置
猜你喜欢
  • 1970-01-01
  • 2021-03-05
  • 2011-07-20
  • 2013-08-25
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
相关资源
最近更新 更多