0

我今天在这里提出一个让我相当困惑和困惑的问题。也许有人可以给我一些帮助。

我有三个表如下。请注意,它们已针对此问题进行了简化。

//table_checks//

check_id |task_id| status
   1     |  1    | Done
   2     |  1    | Done
   3     |  1    | Done
   4     |  2    | Done
   5     |  2    | Not Done
   6     |  2    | Not Done
   7     |  2    | Not Done
   8     |  2    | Done
   9     |  3    | Done
  10     |  3    | Done
  11     |  3    | Not Done
  12     |  3    | Done

//table_user//

user_id |  email   | type
   1    |  a@a.com | IN
   2    |  b@b.com | IN
   3    |  c@c.com | EX

//table_chk_usr//

check_id |user_id 
   1     |  1    
   2     |  1    
   3     |  1    
   4     |  2    
   5     |  2     
   6     |  2     
   7     |  2     
   8     |  2     
   9     |  3     
  10     |  3     
  11     |  3     
  12     |  3     

下面是三个表及其在 table_chk_usr 表中的关系。

我的问题是如何从表中查询和选择table_userwith 类型的行,其中分配的所有用户都使用= 。'IN'table_usertask_idstable_checksstatusdone

所以预期的结果应该如下

//table_user//

user_id |  email   | type
   1    |  a@a.com | IN

由于 user_id 为 1 已完成所有状态为 done 的 task_id。

我希望这对你们这些正在阅读的人有意义。任何帮助都感激不尽。

请注意,我使用 PHP 作为我的服务器端语言,如果这有任何帮助的话。

4

2 回答 2

2

我想这就是你要找的。

select user.user_id, user.email, user.type, 
sum(if(status = 'done',1, 0)) as done, count(*) as checks
  from checks
   join chk_user on checks.check_id = chk_user.check_id
   join user on chk_user.user_id = user.user_id
   group by chk_user.user_id
   having done = checks

sqlFiddle

于 2013-03-13T20:09:32.700 回答
0

您可以在此处使用连接,但可能有更好的方法。

SELECT * FROM table_checks
INNER JOIN table_chk_usr
  ON table_checks.check_id = table_chk_usr.check_id 
INNER JOIN table_user
  ON table_chk_usr.user_id = table_user.user_id
WHERE table_checks.status = 'Done'
AND table_user.type = 'IN'
于 2013-03-13T19:53:21.283 回答