在下面的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中检索的数据不足以被识别为连接表?
答案 0 :(得分:1)
据我所知,您只能从best
加入total_sellers_month
以获取您未从派生表中收集的列。这可以是一种有效的技术,其中best
只是查找所需行的方式,但必须连接回源表才能访问这些完整的源行。
然而,因为您只显示"选择最佳。*"在这个问题中,没有任何联接的目的。也许这可能是由于问题的简化。