mysql - 连接具有多行的表中的一行

标签 mysql optimization count query-optimization

这是一个关于mysql查询的问题。作为示例,我们使用一个跟踪汽车销售的系统。有一个包含 salespersons 的表、一个包含 sales 的表以及一个链接这两个表的表。大多数时候,每次销售只有一个人与之相关。但有时一次销售涉及多个人。

Table sales
id | carId | date
---+-------+-----------
1  | 2     | 11-01-2011
2  | 8     | 11-02-2011
3  | 5     | 11-05-2011

Table link
personId | saleId
---------+-------
2        | 1 
2        | 2 
1        | 3
2        | 3

Table salesperson
id | name  | age
---+-------+----
1  | Barry | 25
2  | Sara  | 32

为了检索数据,我想在网页中显示每笔销售的信息。但当多人参与销售时,就会出现问题。我尝试在代码中应用下面的查询,之后 PHP 会处理多人与一笔销售关联时的异常,但由于销售表的长度,下面的查询需要太多时间来运行:

SELECT count(personId) as amount, carId, date
FROM link 
JOIN salesperson ON link.personId = salesperson.id  
JOIN sales ON sales.id = link.saleId
GROUP BY link.saleId

是否有更高效的查询可以使用?顺便说一句,表的索引已经完成。

最佳答案

那就是:

SELECT STRAIGHT_JOIN
    amount, carId, date
FROM (
    SELECT saleId, count(*) as amount
    FROM link
    GROUP BY saleId
    ORDER BY NULL) as amounts
JOIN sales ON sales.id = amounts.saleId;

关于mysql - 连接具有多行的表中的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8501375/

相关文章:

arrays - Elasticsearch:设置字段中数组元素的数量

mysql - 考虑到序列/自动增量的不同实现,我如何创建一个可以跨不同 rdbms 工作的 SQL 插入语句?

PHP/SQL - 很多 SQL 查询

mysql - "SELECT COUNT(*)"很慢,即使有 where 子句

c# - Entity Framework 异步记录计数与记录

python - 识别并计算用户定义段内的点

php - mysql插入js创建的textareas数组

具有多个自增列的 Mysql 表

javascript - 使用 AJAX 部分更新列表

algorithm - 找到最低票价