我有一个结果集,我使用以下方法从三个表之间的连接中获得:
SELECT X.*, Y.Name FROM `A` AS X
INNER JOIN `B` AS Y
INNER JOIN `C` AS Z
ON X.id=Y.id AND X.categoryID=Z.categoryID
WHERE X.userID_FK=%d AND X.listID_FK=%d
ORDER BY Z.categoryRank ASC
我有第四个表“D”,其中包含:
-------------------------------
id_FK userID_FK vote
-------------------------------
这里 (id_FK, userID_FK)
对是一个 PK。
第一个查询返回的每个 X.id
可能在 D
表中有多个条目。通常,对于每个返回的行,为了计算每个 id
的投票数,我会编写如下查询:
SELECT SUM(vote) FROM D WHERE `id`=%d
我想知道我是否可以将这两个查询优化为一个查询,因为当前方案导致 O(n)
执行时间。 n
是第一个查询返回的结果数。
最佳答案
你可以这样简单地做
SELECT
X.*,
Y.Name,
(SELECT
SUM(vote)
FROM D
WHERE `id` = X.id) as Count
FROM `A` AS X
INNER JOIN `B` AS Y
INNER JOIN `C` AS Z
ON X.id = Y.id
AND X.categoryID = Z.categoryID
WHERE X.userID_FK = % d
AND X.listID_FK = % d
ORDER BY Z.categoryRank ASC
关于MySQL 复杂连接优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10309937/