2016-08-11 91 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