MySQL: 寻找最有效地使用 INNER JOIN 与子查询

MySQL: Finding the most efficient use of INNER JOIN with subquery

我有一个使用 INNER JOIN 和子查询的工作查询,但想知道是否有更有效的编写方式。

with prl
as
(
SELECT `number`, creator, notes
FROM ratings
INNER JOIN
    projects on ratings.project_id = projects.project_id
    WHERE ratings.rating = 5 AND projects.active = 1
)
SELECT prl.`number`, creator, notes
FROM prl
INNER JOIN(
    SELECT `number`
    HAVING COUNT(creator) > 1
)temp ON prl.`number` = temp.`number`
ORDER BY temp.`number`

项目table

project_id| number | creator | active |
|   1     |   3    |  bob    |    1   |
|   2     |   4    |  mary   |    1   |
|   3     |   5    |  asi    |    1   |

评分table

project_id|  notes | rating |
|   1     |  note1 |    5   |
|   1     |  note2 |    5   |
|   3     |  note3 |    5   |
|   1     |  note4 |    1   |
|   2     |  note5 |    5   |
|   3     |  note6 |    2   |

结果

| number | creator |  notes |
|   3    |  bob    |  note1 |
|   3    |  bob    |  note2 |

您使用的 MySQL 版本似乎支持 window 功能。如果是这样,那么试试这个:

SELECT number, creator, notes
FROM
(SELECT p.number, p.creator, r.notes,
       COUNT(creator) OVER (PARTITION BY creator) AS cnt
 FROM project p 
  JOIN rating r ON p.project_id=r.project_id
WHERE r.rating=5
   AND p.active = 1) v
WHERE cnt=2;

至于这是否更有效,我不太确定,因为它取决于您的 table 索引,但对于小数据集,我认为这会很好。

Demo fiddle