在Mybatis中使用連表查詢的一次實際應用
阿新 • • 發佈:2018-09-09
多表關聯 del 應用 行記錄 全部 業務 val 一定的 att
以前在工作中很少使用多表關聯查詢,對連表查詢的具體作用和使用場景也沒有很直觀的認識,通過這次在項目中的實際應用,對此有了一定的認識,特記錄如下。
關聯表介紹:
分別是屬性表attr_info、屬性值表attr_val_info、商品sku信息表sku_info、商品sku所屬的屬性信息表sku_attr_info。
attr_info表:存儲屬性大類信息,如顏色、配置、網絡
attr_val_info表:存儲屬性的具體值,如顏色-黃色、配置-128G、網絡-移動、聯通
sku_info表:存儲sku的基礎信息
sku_attr_info:存儲sku對應的屬性及屬性值信息
業務場景一:
查詢出每個sku所對應的屬性名稱及屬性值名稱
SELECT DISTINCT sai.product_id AS product_id, sai.attr_id AS attr_id, ai. attr_name, sai.attr_val_id AS attr_val_id, sai.attr_val_name AS attr_val_name FROM attr_info ai JOIN attr_val_info avi ON ai.attr_id = avi.attr_id JOIN sku_attr_info sai ON ( sai.product_id = avi.product_id AND sai.attr_val_id = avi.attr_val_id )
將這三張表中的記錄在業務代碼中全部查詢出來,然後在代碼中編寫拆裝拼接邏輯到一個model中,這樣費時費力不好把握各個表之間的關聯關系而且邏輯不清晰,很容易出錯。
連表查詢就相當於將表記錄之間的關聯邏輯由代碼層面,遷移至數據庫層面,在數據庫中通過關聯查詢語句查找到滿足關聯條件的數據集合,在業務代碼中只需要對此查詢集合進行where條件查詢即可。
業務場景二:
在原有的sku_attr_info表中,一個sku的屬性信息對應一行記錄,每個sku包含多個屬性,即多行記錄,現在想查詢出sku所對應的顏色id和配置id以及其他的sku的屬性,用一行顯示。
SELECT si.product_id, si.sku_id, si.sku_url, sai.color_id, sai.spec_id FROM sku_info si JOIN ( SELECT sku_id, MAX( CASE attr_id WHEN 1 THEN attr_val_id ELSE 0 END ) color_id, MAX( CASE attr_id WHEN 2 THEN attr_val_id ELSE 0 END ) spec_id FROM sku_attr_info GROUP BY sku_id ) sai ON ( si.sku_id = sai.sku_id );
在Mybatis中使用連表查詢的一次實際應用