使用带有错误的SELECT查询结果计算不同的值

时间:2014-12-14 19:28:34

标签: mysql sql

我有一种奇怪的情况。我需要从表名中选择具有来自其他表的不同值的所有数据。

以下是我需要获取不同值的数据库数据库方案:

enter image description here

当我在没有INNER JOIN的情况下运行两个查询时,它们运行时没有错误但是当我使用INNER JOIN时出现错误

这是我使用的查询:

SELECT * FROM `todo`
INNER JOIN 

SELECT `task`.`status`,COUNT(*) as count FROM `task`
ON `todo`.`id`=`task`.`id_list` WHERE `todo`.`user_id` = 43  

如您所见,我需要从其他表中获取状态列的总数。可以使用一个查询来完成,还是需要运行两个查询来获取数据...

2 个答案:

答案 0 :(得分:1)

您需要将连接包装在括号中

SELECT td.*, t.* 
FROM `todo` td
JOIN
(   SELECT `status`, SUM(status=0) as status_0, SUM(status=1) as status_1 , id_list
    FROM `task`
    GROUP BY id_list 
) t ON td.id= t.id_list
WHERE td.user_id = 43

答案 1 :(得分:1)

您可以在一个查询中执行此操作。即使没有子查询:

SELECT ta.status, COUNT(*) as count
FROM todo t INNER JOIN 
     task ta
     ON t.id = ta.id_list
WHERE t.user_id = 43  
GROUP BY ta.status;

编辑:

如果以上产生了你想要的东西,那么你可能需要:

SELECT t.*, ta.status, taa.cnt
FROM todo t INNER JOIN 
     task ta
     ON t.id = ta.id_list INNER JOIN
     (SELECT count(*) as cnt, ta.status
      FROM task ta
      GROUP BY ta.status
     ) taa
     on ta.status = taa.status
WHERE t.user_id = 43  ;

您似乎想要status级别的摘要,该摘要仅在task中。但是您希望todo的行级信息。