您好,登錄后才能下訂單哦!
這篇文章主要介紹了mysql使用left join連接出現重復問題怎么解決的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇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 10002
5 標題5 2018-03-20 10003
這個時候我們使用下面sql 執行的時候發現
selecct * from user left join product on user.userid=product.userid;
執行結果竟然比user表的總數記錄多
其實這個問題明眼人一眼就看出來了,因為left join的關鍵字在product表不唯一,所以這部分不唯一的數據就產生了笛卡爾積,導致執行結果多于預期結果。
解決的辦法就是采用唯一鍵去關聯做鏈接查詢就可以了
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連接出現重復問題怎么解決”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“mysql使用left join連接出現重復問題怎么解決”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。