我有三个表:tasks
, groups
和items
.
-
tasks
列:task_id、描述、组(INT,用组表中的名称替换 id)、优先级、截止日期、日期、已删除(0 或 1); -
groups
列:id、名称; -
items
列:id、描述、task_id;
例如:
tasks
表:
1|bla-bla|group1|high|2|2014-04-15 18:09:18|NULL|0
2|bla-bla|group1|low |1|2014-05-15 18:09:18|NULL|1
groups
表:
1|group1
items
表:
1|item1|1
2|item2|1
3|item3|2
和我的sql:
SELECT tasks.task_id,
tasks.description,
groups.name,
tasks.priority,
COUNT(items.id),
tasks.date,
tasks.deadline,
tasks.deleted
FROM tasks
INNER JOIN items
ON items.task_id = tasks.task_id
INNER JOIN groups
ON groups.id = tasks.group
WHERE tasks.deleted = 1
GROUP BY tasks.task_id;
这将返回空表,但如果 tasks.deleted <> 1
返回一切正常。我想获取所有已删除的任务以及每行中的项目数。
最佳答案
到groups
表的连接是在name
上,而不是在id
上。您在查询中还有一个名为 test
的表别名,该别名似乎未定义。试试这个:
SELECT t.task_id, t.description, g.name, t.priority,
COUNT(i.id), t.date, t.deadline, t.deleted
FROM tasks t
INNER JOIN items i
ON i.task_id = t.task_id
INNER JOIN groups g
ON g.name = t.group
WHERE t.deleted = 1
GROUP BY t.task_id;
关于mysql 显示每行中有两个内连接的其他表的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23315572/