mysql使用left join連線出現重複問題怎麼解決

王林
發布: 2023-06-02 13:13:41
轉載
2857 人瀏覽過

    mysql使用left join連線出現重複

    #問題描述

    在使用連接查詢的時候,例如以A表為主表,左連接B表,我們預期的是A表有多少筆記錄,查詢結果就有多少筆記錄,但是可能會出現這樣的結果,就是查詢出來的記錄總條數,多餘A表的記錄總條數,並且是查詢的結果顯示出來時有部分列是重複的,簡單的說,就是產生了笛卡爾積。

    問題範例

    其中A表是使用者表(user),欄位分別是:

    ID name userid
    1 aaaa 10001
    2 bbbb 10002
    3 ccccc 10003

    B表格是第一類產品表(product),欄位分別是:

    ID title time userid
    1標題1 2014-01-01 10002
    2 標題2 2014-01-01 10002
    3 標題3 2014-01-01 10001
    4 標題4 2018-03-20#10055 2018-03-20 10003

    這時候我們使用下面sql 執行的時候發現

    selecct * from user left join product on user.userid=product.userid;
    登入後複製

    mysql使用left join連線出現重複問題怎麼解決

    執行結果竟然比user表的總數記錄多

    問題解決

    其實這個問題明眼人一眼就看出來了,因為left join的關鍵字在product表不唯一,所以這部分不唯一的資料就產生了笛卡爾積,導致執行結果多於預期結果。

    解決的方法就是採用唯一鍵去關聯做連結查詢就可以了

    mysql使用left join時,右表資料有重複資料

    LEFT JOIN 關鍵字會從左表(table_name1) 那裡傳回所有的行,即使在右表(table_name2) 中沒有符合的行。此時右表 (table_name2)右表有透過 on 關鍵字過濾後沒有資料或只有一條資料時是沒有問題的。

    我要說的是如果右表 (table_name2)出現重複資料(業務上完全重複)該怎麼處理。

    當右表(table_name2)通過on 關鍵字過濾後出現重複數據,此時查出的數據就會是,右表數據*重複的數據右表其他條件數據,和我們所需數據的條數不同。

    我的解決方法是,先根據篩選欄位分組查詢一次右表 (table_name2),把相同的資料過濾掉,然後把這個結果當成右表在進行關聯

    前面脑补 
    LEFT JOIN (SELECT MODEL_CODE,MODEL_NAME from tm_model GROUP BY MODEL_CODE) tm on tav.model_code = tm.MODEL_CODE 
    后面脑补
    登入後複製

    以上是mysql使用left join連線出現重複問題怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    來源:yisu.com
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板