在使用連接查詢的時候,例如以A表為主表,左連接B表,我們預期的是A表有多少筆記錄,查詢結果就有多少筆記錄,但是可能會出現這樣的結果,就是查詢出來的記錄總條數,多餘A表的記錄總條數,並且是查詢的結果顯示出來時有部分列是重複的,簡單的說,就是產生了笛卡爾積。
其中A表是使用者表(user),欄位分別是:
ID name userid
1 aaaa 10001
2 bbbb 10002
3 ccccc 10003
B表格是第一類產品表(product),欄位分別是:
這時候我們使用下面sql 執行的時候發現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
selecct * from user left join product on user.userid=product.userid;執行結果竟然比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中文網其他相關文章!