2016-08-11 66 views
0


我正在使用此mysql查詢並對其進行排序,我已添加bool列is_main(是否來自主表)。結果是工作,但我得到重複,因爲is_main列..有沒有解決這個問題? 查詢:mysql UNION重複項

SELECT 
    b.dateTime, 
    a.id, 
    a.jobName, 
    a.is_main 
FROM job_data a, data b 
WHERE a.userEmail = b.userEmail AND a.userEmail = :email 
UNION 
SELECT 
    b.dateTime, 
    b.id, 
    b.jobName, 
    b.is_main 
FROM job_data a, data b 
WHERE a.userEmail = b.userEmail AND a.userEmail = :email 

ORDER BY is_main DESC 


的job_data表:

id | dateTime | jobName | is_main 
1 | 00.00.00 | job1 | 0 
2 | 00.00.00 | job2 | 0 
3 | 00.00.00 | job3 | 0 


數據表:

id | dateTime | jobName | is_main 
1 | 00.00.00 | job1 | 1 
2 | 00.00.00 | ---  | 1 


輸出是這樣的:

job1 //this is not okay, because of duplicate job1 
job1 
job2 
job3 
_____ 
--- //this is perfect, because I want empty cell to show on top 
job1 
job2 
job3 
+0

什麼是重複的?我建議顯示一個輸出樣本。 – YakovL

+1

@YakovL我編輯的問題,顯示輸出和表 – Atis

回答

0
SELECT dateTime, id, jobName, max(is_main) from 
(SELECT 
    b.dateTime, 
    a.id, 
    a.jobName, 
    a.is_main 
FROM job_data a, data b 
WHERE a.userEmail = b.userEmail AND a.userEmail = :email 
UNION 
SELECT 
    b.dateTime, 
    b.id, 
    b.jobName, 
    b.is_main 
FROM job_data a, data b 
WHERE a.userEmail = b.userEmail AND a.userEmail = :email 

) 
GROUP BY id 
+0

據我所知,UNION是相同的聯盟DISTINCT – Atis

+0

你是對的,我沒有想清楚,很明顯。 :) – SilicaGel

+0

您是否可以不從結果集中排除is_main列,而是將它用於ORDER BY子句中的排序? (在您的示例數據中,job1的兩個表的id都是1,是否一致?) – SilicaGel