2010-06-17 80 views
0

当我有返回的结果,既包括合同号2个SQL查询来获得独特的价值观,现在我希望得到的合同号如何使用UNION MySQL查询

的独特价值,这里的查询

(SELECT contractno, dsignoff FROM campaigns WHERE clientid = 20010490 AND contractno != '' GROUP BY contractno,dsignoff) UNION (SELECT id AS contractno,signoffdate AS dsignoff FROM contract_details WHERE clientid = 20010490) 

因此,例如,如果union之前的第一个查询返回两个合同no no 10,并且union之后的sql查询返回10,那么我们总共有3行,但是因为所有三行的contractno是10,我只需要返回一行,这可能吗?

+0

只有日期也一样。也就是说,如果contractno和dsignoff是相同的,你只能得到一个明确的联盟。如果日期不同,您仍然可以编写代码来获取它们,但不能使用联合查询。 – MJB 2010-06-17 13:05:53

回答

3

你可以把你的当前请求在临时表,并执行一个选择在此表:

SELECT 
    * 
FROM 
    (
    /* Your request goes here */ 
    SELECT 
     contractno, 
     dsignoff 
    FROM 
     campaigns 
    WHERE 
     clientid = 20010490 AND contractno != '' 
    GROUP BY 
     contractno,dsignoff 
    UNION 
    SELECT 
     id AS contractno, 
     signoffdate AS dsignoff 
    FROM 
     contract_details 
    WHERE clientid = 20010490) 
) AS tmp 
GROUP BY 
    tmp.contractno 

(但你肯定你不能做你想加入吗?)

+0

左加入做了这个伎俩,将接受你的回答,由于最后的评论 – Roland 2010-06-17 14:06:18

+0

@罗兰,我会有兴趣看看你的左加入是如何制定出来的。你可能会把这个问题作为这个问题的答案吗? – Sablefoste 2014-04-23 17:22:43