子查詢

子查詢是一個嵌套在 SELECT、INSERT、UPDATE 或 DELETE 語句或其他子查詢中的查詢。任何允許使用表達式的地方都可以使用子查詢。

1.連接語句join,from中如:

<select id="getExtendedGoodsReport" resultMap="extendedGoodsResultMap"
            parameterType="Object">
        SELECT
        t1.*, CASE
        WHEN t2.assessmentSale = 0.00 THEN
        NULL
        ELSE
        round(t1.extendedSale / t2.assessmentSale,6)
        END extensionRate,
        CASE
        WHEN t3.extendedSaleTotal = 0.00 THEN
        NULL
        ELSE
        round(t1.extendedSale / t3.extendedSaleTotal,6)
        END rate
        FROM
        (
        SELECT
        mpc.category_name AS NAME,
        SUM(amount_ybxsje) AS extendedSale
        FROM
        t_sold_yb yb
        RIGHT JOIN m_product_category mpc ON yb.produt_pl = mpc.product_pl
        <include refid="extendedGoodsReportWhereClause" />
        GROUP BY
        mpc.category_no,
        mpc.category_name
        ) t1
        INNER JOIN (
        SELECT
        mpc.category_name AS NAME,
        SUM(amount_khxssr) AS assessmentSale
        FROM
        t_sold_yb yb
        RIGHT JOIN m_product_category mpc ON yb.produt_pl = mpc.product_pl
        WHERE
        zdeptmnt=#{zdeptmnt}
        <if test="categoryList != null and categoryList.size()!=0">
            and produt_pl IN
            <foreach collection="categoryList" item="item" index="index" open="(" close=")" separator=",">
                #{item.categoryNo}
            </foreach>
        </if>
        <![CDATA[
            AND yb."DATE" >= #{startTimeStr,jdbcType=VARCHAR}
            AND yb."DATE" <= #{endTimeStr,jdbcType=VARCHAR}
        ]]>
        GROUP BY
        mpc.category_no,
        mpc.category_name
        ) t2 ON t1.NAME = t2.NAME
        NATURAL JOIN (
        SELECT
        SUM(amount_ybxsje) AS extendedSaleTotal
        FROM
        t_sold_yb yb
        <where>
            zdeptmnt=#{zdeptmnt}
            <if test="zplant != null and zplant != ''">
                and zplant=#{zplant}
            </if>
            <![CDATA[
            AND yb."DATE" >= #{startTimeStr,jdbcType=VARCHAR}
            AND yb."DATE" <= #{endTimeStr,jdbcType=VARCHAR}
            ]]>
        </where>
        ) t3
        ORDER BY t1.extendedSale DESC
    </select>

2.in,>,=等表達式中

in中:

SELECT ename,job,sal
        FROM EMP
        WHERE deptno in ( SELECT deptno FROM dept WHERE dname LIKE 'A%');

“=”中:

select ename,deptno,sal
        from emp
        where deptno=(select deptno from dept where loc='NEW YORK');
發佈了67 篇原創文章 · 獲贊 22 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章