mysql - 查询结果乘以2

标签 mysql left-join

3张 table 。 app_forms、app_results、app_exhibitions

我想获取表单 ID、表单名称、结果计数以及与表单关联的展览。此刻我收到了这个查询:

SELECT 
f.id as id, 
f.name as formname, 
count(res.form_id) as resultcount, 
group_concat(b.name separator ', ') as exhibitionname 
FROM app_forms f 
LEFT JOIN app_results res ON f.id = res.form_id 
LEFT JOIN app_exhibitions exh ON exh.form_id = f.id 
GROUP by f.id

问题是,它乘以 2。因为我在 concat 组中有 4 个展览(而不是 2 个),并且我在计数组中得到了 4 个结果而不是 2 个。我陷入了如何解决这个问题,它可能与双左连接有关。

最佳答案

最简单的解决方案是在计数上使用 DISTINCT,如果您的 app_results 表上有一个主键,例如 app_results.id:

SELECT 
  f.id as id, 
  f.name as formname, 
  count(DISTINCT res.id) as resultcount, 
  group_concat(b.name separator ', ') as exhibitionname 
FROM
  app_forms f LEFT JOIN app_results res ON f.id = res.form_id 
  LEFT JOIN app_exhibitions exh ON exh.form_id = f.id 
GROUP by f.id

或者加入一个已经分组的表(我假设 b.name 是 exh.name):

SELECT 
  f.id as id, 
  f.name as formname, 
  count(res.form_id) as resultcount, 
  exh.exhibitionname 
FROM
  app_forms f LEFT JOIN app_results res ON f.id = res.form_id 
  LEFT JOIN (
    SELECT form_id, group_concat(name separator ', ') as exhibitionname
    FROM app_exhibitions
    GROUP BY form_id
  ) exh ON exh.form_id = f.id 
GROUP by f.id

关于mysql - 查询结果乘以2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30729104/

相关文章:

php - 数据库总是接收相同的 ID

php - 记录不是来自 mysql 的文本文件

sql - 使用单个表上的多个连接优化 sql 查询

mysql - 左连接返回零行

mysql - 如何优化以下sql查询?

php - mysql从top200随机条目

mysql - 在单个查询中多次连接到同一个表?

mysql - 对于所有项目计数,左连接所有日期的意外结果

sql - 为什么这个 LEFT JOIN 运行缓慢?

java - 从更新的行中获取值