与另一个表保持联接时获取准确的行

时间:2016-04-05 11:26:29

标签: sql postgresql join

我的查询是:

CREATE OR REPLACE VIEW saledetailfortax AS 
    SELECT
        sd.saledetaildate, sd.saledetailtime, sd.shopid, sd.productid,
        sd.unitid, sd.expdate, sd.batchno, sd.mrp, sd.totalprice, sd.qty, 
        sd.looseqty, ord.priceperunit as priceperunit, ord.taxid  
    FROM
        saledetail sd LEFT JOIN orvrcvdetailfortax ord
                                ON sd.productid = ord.productid
                                    AND sd.expdate = ord.expdate
                                    AND sd.batchno = ord.batchno
                                    AND sd.mrp = ord.mrp
    WHERE sd.saledetaildate <= '2016-03-31'
    ORDER BY  sd.saledetaildate , sd.saledetailtime;

这里执行它时会返回比执行此查询更多的行:

SELECT
    sd.saledetaildate, sd.saledetailtime, sd.shopid,
    sd.productid,sd.unitid, sd.expdate, sd.batchno,
    sd.mrp, sd.totalprice, sd.qty, sd.looseqty
FROM saledetail sd
WHERE sd.saledetaildate <= '2016-03-31'
ORDER BY sd.saledetaildate, sd.saledetailtime;

我的目标是从saledetail表中检索行并找出其对应的行 priceperunit, taxid where productid, expdate, batchno, mrp匹配。

问题是同一个(productid, expdate, batchno, mrp)不同的taxid退出,所以记录不仅仅是欲望。如何减少它。

1 个答案:

答案 0 :(得分:0)

CREATE OR REPLACE VIEW saledetailfortax AS
    SELECT
        sd.saledetaildate, sd.saledetailtime, sd.shopid, sd.productid,
        sd.unitid, sd.expdate, sd.batchno, sd.mrp, sd.totalprice,
        sd.qty, sd.looseqty, ord.priceperunit as priceperunit, ord.taxid
    FROM saledetail sd LEFT JOIN orvrcvdetailfortax ord
                            ON sd.productid = ord.productid
    WHERE sd.saledetaildate <= '2016-03-31'
    ORDER BY sd.saledetaildate , sd.saledetailtime;

在上面的

之后你只需要写一个2条件

其他发送给我两个表的数据