2015-05-19 75 views
0

我有一些表,我創建查詢使用UNION將該表連接到一個表。 但我有一些問題,結果有重複的值。在UNION結果中刪除重複結果Mysql

這裏是我的UNION的結果:

enter image description here

這裏是我的查詢:

SELECT * FROM (
SELECT d.type, d.is_delete, a.CUSTOMER_ID, a.ANI, a.FULL_NAME, a.ALAMAT, 
a.CITY, a.PROVINCE_DESC, a.ZIP_CODE, a.PSTN, a.MOBILE, a.EMAIL, 
b.location_id, c.INSTALL_ADDR, c.PSTN as UPD_PSTN, c.MOBILE as UPD_MOBILE 
FROM dailybussolbackup.daily_bussol_20150101 a 
LEFT JOIN collectionticket.ticket_location_kcp b ON a.CUSTOMER_ID = b.CUSTOMER_ID 
LEFT JOIN collectionticket.ticket_customers c ON a.CUSTOMER_ID = c.CUSTOMER_ID 
LEFT JOIN ticket_schedule_complaint d ON d.customer_id = a.CUSTOMER_ID 
WHERE b.location_id = '3' 
     UNION 
SELECT d.type, d.is_delete, a.CUSTOMER_ID, a.ANI, a.FULL_NAME, a.ALAMAT, 
a.CITY, a.PROVINCE_DESC, a.ZIP_CODE, a.PSTN, a.MOBILE, a.EMAIL, 
b.location_id, c.INSTALL_ADDR, c.PSTN as UPD_PSTN, c.MOBILE as UPD_MOBILE 
FROM dailybussolbackup.daily_bussol_20150101 a 
LEFT JOIN collectionticket.ticket_location_kcp b ON a.CUSTOMER_ID = b.CUSTOMER_ID 
LEFT JOIN collectionticket.ticket_customers c ON a.CUSTOMER_ID = c.CUSTOMER_ID 
LEFT JOIN ticket_schedule_detail d ON d.cust_id = a.CUSTOMER_ID 
LEFT JOIN ticket_schedule e ON e.id = d.schedule_id 
WHERE b.location_id = '3' 
) as data 
WHERE data.is_delete = 'false' OR data.is_delete IS NULL; 

這裏是我的預期結果:

enter image description here

刪除行typeis_delete列有NULL值和重複。 如何清理它? 謝謝..

+1

重複是指具有相同值的所有列,這就是工會會怎麼看重複。 –

+1

該結果中的所有行都不重複。 –

+0

要澄清其他人在說什麼,請嘗試從您的選擇中移除前兩列,您應該看到假定的重複項消失。 – Giles

回答

0

似乎其餘的字段就像結果集的「PK」。這將在存在時使用'type'和'is_delete'值,或者在其他情況下爲null。
這是一個有點棘手(可能是內部子查詢更好的查詢分析)

SELECT 
    MAX(type) as type, MAX(is_delete) as is_delete 
    CUSTOMER_ID, ANI, FULL_NAME, ALAMAT, 
    CITY, PROVINCE_DESC, ZIP_CODE, PSTN, MOBILE, EMAIL, 
    location_id, INSTALL_ADDR, UPD_PSTN, UPD_MOBILE 
FROM (
    SELECT d.type, d.is_delete, a.CUSTOMER_ID, a.ANI, a.FULL_NAME, a.ALAMAT, 
    a.CITY, a.PROVINCE_DESC, a.ZIP_CODE, a.PSTN, a.MOBILE, a.EMAIL, 
    b.location_id, c.INSTALL_ADDR, c.PSTN as UPD_PSTN, c.MOBILE as UPD_MOBILE 
    FROM dailybussolbackup.daily_bussol_20150101 a 
    LEFT JOIN collectionticket.ticket_location_kcp b ON a.CUSTOMER_ID = b.CUSTOMER_ID 
    LEFT JOIN collectionticket.ticket_customers c ON a.CUSTOMER_ID = c.CUSTOMER_ID 
    LEFT JOIN ticket_schedule_complaint d ON d.customer_id = a.CUSTOMER_ID 
    WHERE b.location_id = '3' 
      UNION 
    SELECT d.type, d.is_delete, a.CUSTOMER_ID, a.ANI, a.FULL_NAME, a.ALAMAT, 
    a.CITY, a.PROVINCE_DESC, a.ZIP_CODE, a.PSTN, a.MOBILE, a.EMAIL, 
    b.location_id, c.INSTALL_ADDR, c.PSTN as UPD_PSTN, c.MOBILE as UPD_MOBILE 
    FROM dailybussolbackup.daily_bussol_20150101 a 
    LEFT JOIN collectionticket.ticket_location_kcp b ON a.CUSTOMER_ID = b.CUSTOMER_ID 
    LEFT JOIN collectionticket.ticket_customers c ON a.CUSTOMER_ID = c.CUSTOMER_ID 
    LEFT JOIN ticket_schedule_detail d ON d.cust_id = a.CUSTOMER_ID 
    LEFT JOIN ticket_schedule e ON e.id = d.schedule_id 
    WHERE b.location_id = '3' 
) as data 
GROUP BY 
    CUSTOMER_ID, ANI, FULL_NAME, ALAMAT, 
    CITY, PROVINCE_DESC, ZIP_CODE, PSTN, MOBILE, EMAIL, 
    location_id, INSTALL_ADDR, UPD_PSTN, UPD_MOBILE 
WHERE is_delete = 'false' OR is_delete IS NULL;