重复记录需要MYSQL UNION

时间:2013-03-11 13:20:01

标签: mysql sql union

我将DCHDR表作为DC_No字段和唯一记录 DCDTL是一个事务表,它具有不同产品和数量的重复DC_Nos。

从下面的MYSQL行,我可以加入,联合2个表,只有当DCDTL中的重复记录不相同时,结果才符合我的要求,

即,下面的示例记录在DCDTL中,只显示1,而第二个记录则不显示。

示例:DCDTL和数据中的字段 -

DC_Nos, Product_Desc, Nos, Qty  
111     Oxygen 99.99,  4,  10 
111     Oxygen 99.99,  4,  10 

我知道UNIQUE会删除表中的重复项,但是还有其他方法可以显示甚至相同的DCDTL表记录。 Pl建议。

    SELECT DC_No, DC_date, T.DC_Nos, T.Product_Desc,  T.Nos, T.Qty
    FROM DCHDR AS H
    LEFT JOIN DCDTL AS T ON H.DC_No = T.DC_Nos
    UNION
    SELECT DC_No, DC_date, T.DC_Nos, T.Product_Desc, T.Nos, T.Qty
    FROM DCHDR AS H
    RIGHT JOIN DCDTL AS T ON H.DC_No = T.DC_Nos

以下是表格和所需结果的样本数据:

DCHDR表:

 DC_date     DC_Nos  
 2013-01-01  111
 2013-01-02  112
 2013-01-03  113

DCDTL表:

 DC_Nos, Product_Desc, Nos, Qty  
 111     Oxygen 99.99,  4,  10 
 111     Oxygen 99.99,  4,  10 
 111     Nitrogen,      9,  14
 112     Nitrogen,      8,  29
 113     Zero Air,      4,  15

需要的结果:

 DC_date     DC_Nos  Product_Desc, Nos, Qty
 2013-01-01  111     Oxygen 99.99,  4,  10
 2013-01-01  111     Oxygen 99.99,  4,  10
 2013-01-01  111     Nitrogen,      9,  14
 2013-01-02  112     Nitrogen,      8,  29
 2013-01-03  113     Zero Air,      4,  15

2 个答案:

答案 0 :(得分:1)

为什么在使用UNION实现此目标时,您需要LEFT and RIGHT JOIN INNER JOIN

SELECT  a.DC_DATE, b.*
FROM    DCHDR a
        INNER JOIN DCDTL b
            ON a.DC_Nos = b.DC_Nos

要进一步了解联接,请访问以下链接:

答案 1 :(得分:1)

此查询将为您提供所需的结果 -

SELECT * FROM dchdr
  LEFT JOIN dcdtl -- or maybe INNER JOIN
    ON dchdr.DC_Nos = dcdtl.DC_Nos

这是你想要的吗?