【问题标题】:mySQL select every record that does not exist in another table [closed]mySQL选择另一个表中不存在的每条记录[关闭]
【发布时间】:2020-10-08 20:29:27
【问题描述】:

我有 3 张桌子:

  • 用户 (id_user)
  • 成就 (id_achievement)
  • user_achievements (id_user, id_achievement)

我需要帮助选择用户尚未完成的每个成就。

【问题讨论】:

  • 有了那个数据结构,你怎么知道成就是什么?
  • 它有更多字段,但每个用户和每个成就都有一个 id
  • 适用于所有用户还是仅适用于特定用户?

标签: mysql sql join select subquery


【解决方案1】:

考虑生成用户和成就的所有组合的cross join,以及带有相关子查询的not exists 条件以过滤掉已经完成的那些:

select u.id_user, a.id_achievement
from users u
cross join achievements a
where not exists (
    select 1 
    from user_achievements ua 
    where ua.id_user = u.id_user and ua.id_achievement = a.id_achievement
)

【讨论】:

  • 它成功了,非常感谢,不知道它存在交叉连接,好吧,我想我得多读一点
猜你喜欢
  • 2013-05-19
  • 2021-01-26
  • 2015-08-27
  • 2020-12-28
  • 2023-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
相关资源
最近更新 更多