【MYSQL 第4篇】left join 數據結果比預計值大的問題

近期我在做路徑轉化分析,發現用left join嵌套查詢輸出的結果遠比預計結果要大,先來看看例子:

         CREATE TABLE `atext`;
         USE `atext`;
         CREATE TABLE `用戶行為`(
                          id INT,
                      UUID CHAR(32),
                          date_str DATE,
                          pv_sid INT,
                          pv_seq INT,
                          click_event CHAR(10)
                          );
                     LOAD DATA LOCAL INFILE  'C:\\Users\\yuankun\\Desktop\\501.csv' INTO TABLE 用戶行為 FIELDS TERMINATED BY ',';

        #"用戶行為"表導入了2261條記錄      
             
           CREATE TABLE `用戶行為2`(
                            id INT,
                         UUID CHAR(32),
                            date_str DATE,
                           pv_sid INT,
                          pv_seq INT,
                        click_event CHAR(10)
                          );
                  LOAD DATA LOCAL INFILE 'C:\\Users\\yuankun\\Desktop\\502.csv' INTO TABLE 用戶行為2 FIELDS TERMINATED BY ',';

           #"用戶行為2"表導入了9890條記錄    

         SELECT a.*,b.* FROM
           (SELECT
          DISTINCT
             `id`
             ,UUID
             ,date_str
            ,pv_sid
            ,pv_seq
            ,click_event
          FROM `用戶行為`) a
           LEFT JOIN
            (SELECT
           DISTINCT
             `id`
             ,UUID
             ,date_str
             ,pv_sid
             ,pv_seq
             ,click_event
          FROM `用戶行為2`) b
         ON a.uuid = b.uuid
         AND a.pv_sid = b.pv_sid

       #數據結果是3310條記錄,比預計應該輸出a表的記錄2261條多了很多。

這是什么原因呢?
原因就是"用戶行為"表中的uuid 和pv_sid與"用戶行為2"表中的uuid 和pv_sid是一對多的關系,故輸出的結果會是多對多,使“用戶行為”表復制相應的條數匹配與“用戶行為2”表已經對應好的記錄。
所以在每個子查詢中加入了distinct,依然會出現以上情況。如果去掉distinct,同樣原理,會出現多對多的情況,輸出結果會更離譜。
如何解決以上情況:
1、轉化思路,用其他的方法來計算用戶路徑轉化;
2、增加唯一識別的主鍵。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容