选择一组具有特定记录数据的行
我今天在这里提出一个让我感到困惑和困惑的问题。也许外面有人可以给我一点帮助。选择一组具有特定记录数据的行
我有三个表如下。请注意,这个问题被简化了。
// // 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 | [email protected] | IN
2 | [email protected] | IN
3 | [email protected] | 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_user
查询和table_user
选择行与'IN'
类型,其中所有的table_checks
分配task_ids
用户都与status
= done
。
所以预期的结果应该是如下
// // table_user
user_id | email | type
1 | [email protected] | IN
由于USER_ID 1已经完成了与状态的所有task_ids完成。
我希望这对您阅读的人有意义。任何帮助都感激不尽。
请注意,我使用PHP作为我的服务器端语言,如果这有帮助的话。
我想这就是你要找的。
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
您可以在这里使用连接,但可能有更好的方法来做到这一点。
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'
(1)第二JOIN缺少表名称。 (2)您没有检查为用户分配的**全部**任务的状态为“完成”。 – 2013-03-13 20:00:26
你也忘记了“type ='IN'”,但这是微不足道的 – 2013-03-13 20:03:51
并不是要混淆你。我只是指出,你忘记了OP的要求只返回类型为'IN'**的用户**。 – 2013-03-13 20:19:52
..哇,我无语。如果你需要肾脏或肝脏移植给我一个味精。 – BaconJuice 2013-03-13 20:33:31