java --級聯操做(查詢/更新)

1.表設計以下sql

2.測試數據以下測試


3.需求設計

查詢某級別下面全部的子級別(假設級別最多隻有3級),例如,某級別的id=1000000000,查詢以下code

SELECT * FROM t_commodity_type tct WHERE tct.PARENT_TYPE_ID = 1000000000
UNION ALL
SELECT * FROM t_commodity_type tct2 WHERE tct2.PARENT_TYPE_ID in (SELECT tct3.COMMODITY_TYPE_ID FROM t_commodity_type tct3 WHERE tct3.PARENT_TYPE_ID = 1000000000)

4.若是存在多級的話,一直union all下去it

5.針對業務改善如上表設計io

很明顯,一個現級id、一個父級id不能方便的查詢,還須要增長一個原級id。class

這樣,查詢某個級別下面全部子級的時候,就能夠掛上級別和原級id查詢,這樣方便些。nio


6.針對如上表的更新im

更新某個級別下面全部的use_flag,以下的sql假設該級別爲1
數據

            UPDATE
            t_commodity_type tct
            SET
            tct.USE_FLAG = 0,
            tct.UPD_USER_ID = #{userId},
            tct.UPD_TIME = #{updTime}
            WHERE
            (
            tct.COMMODITY_TYPE_ID = #{commodityTypeId}
            AND 
            tct.COMMODITY_LEVEL = 1
            )
            OR
            (
            tct.PARENT_TYPE_ID = #{commodityTypeId}
            AND
            tct.COMMODITY_LEVEL = 2
            )
            OR
            tct.COMMODITY_TYPE_ID IN
            (
            SELECT
            tct3.COMMODITY_TYPE_ID
            FROM
            t_commodity_type tct3
            LEFT JOIN
            t_commodity_type tct2
            ON
            tct3.PARENT_TYPE_ID = tct2.COMMODITY_TYPE_ID
            WHERE
            tct3.COMMODITY_LEVEL = 3
            AND
            tct2.PARENT_TYPE_ID = #{commodityTypeId}
            )
相關文章
相關標籤/搜索