ibatis完成关系表的并集,交集与非集

        系统有三张表,文章,标签及关系表。如何通过标签进行并集,交集与非集的查询,本来想找一些开源的框架来完成,后来发现可以用sql搞定的话,就懒得优化了。配置如下:

ComplexQuery包含三个属性,List<Long> andTagIds; List<Long> orTagIds; List<Long> notTagIds;

<select id="listArticleIdsByQuery" resultClass="java.lang.Long" parameterClass="ComplexQuery">

        select distinct(article_id) from article_tag_relation where 1 = 1

<dynamic>

    <isNotEmpty prepend="and" property="andTagIds">

            <iterate conjunction="and" property="andTagIds">

article_id in (select distinct(article_id) from article_tag_relation where tag_id = #andTagIds[]#)

</iterate>

            </isNotEmpty>

            <isNotEmpty prepend="and" property="notTagIds">

<iterate conjunction="and" property="notTagIds">

article_id not in (select distinct(article_id) from article_tag_relation where tag_id = #notTagIds[]#)

</iterate>

            </isNotEmpty>

    <isNotEmpty prepend="and" property="orTagIds">

<iterate conjunction="," open="tag_id in (" close=")" property="orTagIds">

#orTagIds[]#

</iterate>

            </isNotEmpty>

</dynamic>

        limit #startRow#,#pageSize#

    </select>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值