通过删除重复项来获取左连接查询后的数据?

时间:2011-08-31 05:38:14

标签: java mysql jdbc

我使用了左连接查询和两个表,所以我得到了结果集中主表列值的多个值。如何删除重复项?

查询:

SELECT cc.CCODE, cc.CNAME, rc.RCODE, rc.RNAME
  FROM RCODE AS rc 
  LEFT JOIN CCODE AS cc ON cc.RCODE = rc.RCODE
 GROUP BY cc.ccode

对于rc.RCODE,如果子表中有多个条目,则会得到重复值。获得结果集后,如何在代码级别删除它?

第一张表 - > RCODE INDIA PAKISTAN AMERICA第二张表 - > RCODE CCODE INDIA KERALA INDIA KARNATAKA AMERICA TEMP我需要获得INDIA - >和它的CCODE ANERICA它的CCODE PAKISTAN它的CCODE - >如果它的null确定无法获得RCODE

1 个答案:

答案 0 :(得分:0)

你的问题并不是那么清楚,但如果你想在RCode表中的每一行的结果集中有一行,最多只有一行信息来自CCode表,那么你应该写您的查询生成您想要的内容,而不是在获取数据后修改结果集。由于每个RCode值需要来自CCode表的一行,我们可以使用:

SELECT cc.CCode, cc.CName, rc.RCode, rc.RName
  FROM RCode AS rc
  LEFT JOIN (SELECT c1.CCode, c1.RCode, c1.CName
               FROM CCode AS c1
               JOIN (SELECT c2.RCode, MAX(c2.CCode) AS CCode
                       FROM CCode AS c2
                      GROUP BY c2.RCode) AS c3
                 ON c1.CCode = c3.CCode AND c1.RCode = c3.RCode
            ) AS cc
    ON cc.RCode = rc.RCode

最里面的子查询(标记为c3)为CCode表中的每个RCode提供了最大CCode。当它与CCode表连接时,它也会为您提供相应的CName。此结果集(标记为cc)与RCode表保持外部连接,但每个RCode的cc结果集中最多只有一行,除非CCode表包含多个具有相同RCode和最大CCode的行值。如果这是一个问题,那么你需要找到一种替代机制,从每个RCode值的CCode表中给你一行(可能是MAX(CName)而不是MAX(CCode))。