1. 程式人生 > 實用技巧 >left join 左表合併去重技巧

left join 左表合併去重技巧

left join 語句格式為: A LEFT JOIN B ON 條件表示式;
left join 是以A表為基礎,A表即左表,B表即右表。左表(A)的記錄會全部顯示,而右表(B)只會顯示符合條件表示式的記錄,如果在右表(B)中沒有符合條件的記錄,則記錄不足的地方為NULL。
使用left join, A表與B表所顯示的記錄數為 1:1 或 1:0,A表的所有記錄都會顯示,B表只顯示符合條件的記錄。但如果B表符合條件的記錄數大於1條,就會出現1:n的情況,這樣left join後的結果,記錄數會多於A表的記錄數。
針對上述1:n的情況,轉換為1:1的關係,需要對B表進行去重處理,使用非唯一標識的欄位做關聯,方法如下:

1.DISTINCT 查詢結果是 第一張表唯一的資料,重複的資料不會顯示出來;

SELECT
DISTINCT(a.id)
FROM
    table_a a
    LEFT JOIN table_b b ON b.base_id = a.idWHERE
    a.discard_status = 0
    AND a.org_id = 123456;

2.GROUP BY拿出b表的一條資料關聯 使A表與B表所顯示的記錄數為 1:1對應關係;

SELECT
COUNT(0)FROM
    table_a a
    LEFT JOIN (select base_id from table_b group by base_id) b ON
b.base_id = a.id WHERE a.discard_status = 0 AND a.org_id = 123456;

3.max值進行唯一關聯

SELECT
COUNT(0)
FROM
    table_a a
    LEFT JOIN (select max(id), t.* from table_b t group by base_id) b ON b.base_id = a.id
WHERE
    a.discard_status = 0
    AND a.org_id = 123456;