前言
在我们日常的查询业务之中,往往并不是一张表的查询能解决问题。
如何解决不同表的关联问题,我们当前有着不同的方案。
我对于当前的主要看法便是:
关联大量的数据集合使用 JOIN ,关联小量的数据(数据量最多以百为单位,普通古籍在一两百左右) 的集合使用 IN 。
( 至于为什么数据量大的情况下不能使用 IN 呢?我想大家都很清楚了。下文也不对此进行解释)
对于这个观点,大家可能已经理解或者已经熟悉,但是我还是按照一个实际的需求来表达清楚当前的事情。
实际问题
当前存在关系 , 活动计划表(campaign) , 活动奖品表(award) , 用户表(user) , 用户领取奖品表(user_award)
现在我们需要查询用户的领奖记录,每次查询出来十条 。
查询出来的信息包括 :
参加活动计划名称(campaign_name 位于 campaign)
活动奖品名称 (award_name 位于 award_name )
用户名称(user_name , 位于 user)
我们不单单,需要这三个信息作为查询结果,也需要这三个信息作为查询条件。
并且需要按照 领取时间(release_time) 来进行倒序
如果我们想用一条SQL解决所有问题,我们的SQL便会是如此(使用mybatis,写法来表示SQL的多变性:
<select id="xxx">
SELECT * FROM user_award ua
LEFT JOIN user u ON ua.user_id = u.user_id
LEFT JOIN campaign c ON ua.campaign_id = c.campaign_id
LEFT JOIN award a ON ua.award_id = a.award_id
WHERE
1=1