【问题标题】:Count distinct values with SELECT query results with error计算带有错误的 SELECT 查询结果的不同值
【发布时间】:2014-12-15 04:21:38
【问题描述】:

我的情况很奇怪。我需要从表名中选择所有数据,并从其他表中选择不同的值。

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

当我在没有 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  

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

【问题讨论】:

  • 你得到什么错误信息?
  • @David-McQ 错误:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'SELECT task.status,COUNT(*) as count FROM task ON todo.task 附近使用的正确语法。 `id_l' 在第 4 行

标签: mysql sql


【解决方案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

【讨论】:

  • 感谢您的回答。当我运行您的查询时,它可以工作,但问题是我只有状态和计数列作为结果......我也需要来自 todo 数据库的记录
  • 我试过你的代码,但现在我得到了空结果。查询运行良好,但没有结果...我需要对它们进行分组吗?
  • 您的表中可能没有该用户的任何匹配记录。尝试其他用户
  • @JohnRuddell:我认为内联视图查询中缺少GROUP BY 子句。
  • Spencer 是的,你是对的,我的错误.. 有时在我的手机上不利于回答:/
【解决方案2】:

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

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 的行级信息。

【讨论】:

  • 您的代码正在运行,但我需要来自 todo 数据库的数据。通过您的查询,我仅从任务数据库中获得了列状态
猜你喜欢
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
相关资源
最近更新 更多