您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

联接四个涉及LEFT JOIN的表,没有重复项

联接四个涉及LEFT JOIN的表,没有重复项

您有两个LEFT JOINS

您仍然会得到 行,只是未显示“ jane”,联接条件将其过滤掉,但LEFT JOIN无论如何仍将行保留在结果中并追加NULL值。

您可以通过使用 和[INNER] JOIN而不是LEFT JOIN间的solved和来实现您想要的功能users手册:

如有必要,请使用括号来确定嵌套顺序。在没有括号的情况下,JOINs从左到右嵌套。

SELECT c.name AS cat_name, t.name AS task_name, u.name AS user_name
FROM   task t
JOIN   category c ON cat.id = t.category_id
LEFT   JOIN
      (solved s JOIN users u ON u.id = s.user_id AND u.name = 'luke') ON s.task_id = t.id
ORDER  BY 1, 2, 3;

使用表名users代替保留字 user

假设users.name定义为 或者您可以有多个名为“ luke”的用户

如果(task.id, users.id)insolved定义为UNIQUEPRIMARY KEY,则完全不需要DISTINCT

结果查询不仅正确,而且速度更快。

贡献的@van) 这是假定CategoryTaskUser被映射类,而solved是实例Table(如图代码示例只是一个关联表多对多):

user_name = 'luke'
q = (session.query(Category.name, Task.name, User.name)
     .select_from(Task)
     .join(Category)
     .outerjoin(
         join(solved, User,
              (solved.c.user_id == User.id) & (User.name == user_name),
         ))
     .order_by(Category.name, Task.name, User.name)
     )
其他 2022/1/1 18:37:51 有427人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶