【问题标题】:Subquery for each separate row每个单独行的子查询
【发布时间】:2021-01-18 19:20:16
【问题描述】:

我得到了获取指定 user_id 的组任务的查询

select tasks.id, tasks.title, tasks.description, tasks.task, g.name
from tasks
    join group_task gt on tasks.id = gt.task_id
    join `groups` g on g.id = gt.group_id where gt.group_id in (select g.id from user_group
    join `groups` g on g.id = user_group.group_id where user_group.user_id = 1)

我想为每一行添加额外的单元格,这将指示任务是否由用户完成。我想出了这样的查询:

select count(*) done from user_task_done where task_id = 5 and user_id = 1

问题是我如何为每一行执行此查询(我还需要以某种方式从任务中获取当前 task_id)并将结果添加到名为“完成”的 exta 列?

【问题讨论】:

  • 样本数据和预期输出会有所帮助。
  • 我认为您的查询可以简化。我建议用样本数据和期望的结果提出一个新问题。

标签: mysql sql join subquery


【解决方案1】:

您可以使用子选择。

select count(*) as done 
from user_task_done 
where 
1=1
and task_id in (select task_id from from task) 
and user_id in (select user_id from from users where user_id > 5)

在子选择中,您也可以添加过滤器。

【讨论】:

    【解决方案2】:

    您可以从子查询中添加单个字段,只要它只返回一列一行

    select tasks.id, tasks.title, tasks.description, tasks.task, g.name, (select count(*) from user_task_done where task_id = tasks.id and user_id = 1) done
    from tasks
        join group_task gt on tasks.id = gt.task_id
        join `groups` g on g.id = gt.group_id where gt.group_id in (select g.id from user_group
        join `groups` g on g.id = user_group.group_id where user_group.user_id = 1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      • 2011-06-07
      • 2021-12-23
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多