【发布时间】:2016-01-17 23:45:21
【问题描述】:
在下面的 SQL 语句中,为什么我们必须在 total_sellers_month 上使用最后一个 JOIN?
SELECT
best.*
FROM
(SELECT
rm.rc_year,
rm.rc_month,
(SELECT vm.vd_id
FROM total_sellers_month vm
WHERE vm.rc_year = rm.rc_year AND vm.rc_month = rm.rc_month
ORDER BY rc_total DESC LIMIT 1
) AS vd_id
FROM total_months rm
) AS best
JOIN sellers v ON (v.vd_id = best.vd_id)
JOIN total_sellers_month rm
ON (rm.vd_id = best.vd_id AND rm.rc_year = best.rc_year AND rm.rc_month = best.rc_month )
ORDER BY rc_year, rc_month;
我们有第二个 SELECT,它已经根据最佳月份/年份为我们提供了年、月和 id:
(SELECT
rm.rc_year,
rm.rc_month,
(SELECT vm.vd_id
FROM total_sellers_month vm
WHERE vm.rc_year = rm.rc_year AND vm.rc_month = rm.rc_month
ORDER BY rc_total DESC LIMIT 1
) AS vd_id
FROM total_months rm
) AS best
然后我们添加卖家以获得更多信息(每个卖家的名称等),然后我们重复调用 total_sellers_month 并加入:
JOIN total_sellers_month rm
ON (rm.vd_id = best.vd_id AND rm.rc_year = best.rc_year AND
我们为什么不对“卖家”使用 JOIN?我们从内部 SELECT 中检索到的数据不足以被识别为用于联接的表?
【问题讨论】:
-
该查询是否针对此问题进行了修改?特别是
best.*:这真的是输出列的唯一来源吗?