为什么在我们已经从内部SELECT中找到数据之后调用JOIN?

时间:2016-01-17 23:45:21

标签: mysql database join

在下面的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中检索的数据不足以被识别为连接表?

1 个答案:

答案 0 :(得分:1)

据我所知,您只能从best加入total_sellers_month以获取您未从派生表中收集的列。这可以是一种有效的技术,其中best只是查找所需行的方式,但必须连接回源表才能访问这些完整的源行。

然而,因为您只显示"选择最佳。*"在这个问题中,没有任何联接的目的。也许这可能是由于问题的简化。