即使使用DISTINCT,mySql中的“我的左联接查询”也会给出重复的结果?

时间:2019-06-29 11:38:33

标签: mysql sql select left-join inner-join

我尝试了许多解决方案来摆脱Query中的重复结果,但是没有用。 这是我的桌子:

备件订单明细表:

id ----- SparePartID --------OrderID -------- Qty ----- Price
101-----------47----------------84-------------2--------1500
102-----------49----------------86-------------3--------3000
103-----------52----------------86-------------5--------800
104-----------45----------------87-------------3--------450
105-----------48----------------87-------------2--------1200

和sparepartfeedback fb表:

PFID -----Review-----------Rating------- SparePartID -----OrderID 
1---------good job------------5--------------49--------------86
2---------nice product--------4--------------52--------------86

现在这是我的查询,它给出重复的结果:

SELECT DISTINCT d.SparePartID, s.Name, d.Quantity, d.Price, d.OrderID , 
       fb.PFID, fb.Review, fb.Rating
FROM sparepartorderdetails d LEFT JOIN
     sparepartfeedback fb
     ON fb.OrderID = d.OrderID INNER JOIN
     sparepart s
     ON d.SparePartID= s.SparePartID INNER JOIN
     orders o
     ON o.OrderID = d.OrderID
WHERE d.OrderID = "86"

现在这些是我得到的重复结果:

SparePartID-----Name------Qty----Price----OrderID ----PFID ------Review---- Rating**
49 ----------- Lights ---- 3---- 3000 ------86--------1----------good job ------ 5
52 ----------- Mirrors---- 5----- 800-------86--------2----------nice product ------ 5
49 ----------- Lights ---- 3---- 3000 ------86--------1----------good job ------ 5
52 ----------- Mirrors---- 5----- 800-------86--------2----------nice product ------ 5

但是,如果没有像 OrderID:87 之类的订单没有评论/评分,此查询不会给出没有重复项。它只是正确显示了“ Review”和“ Review”的订单详细信息和NULL值。评分。但是,当我针对具有评论/评分的OrderID:86运行它时,它会给出重复的结果。

以下是我期望的结果:

SparePartID-----Name------Qty----Price----OrderID ----PFID ------Review------- Rating**
49 ----------- Lights ---- 3---- 3000 ------86--------1----------good job ------- 5
52 ----------- Mirrors---- 5----- 800-------86--------2----------nice product --- 5

1 个答案:

答案 0 :(得分:1)

我认为您在备件ID上没有保留JOIN条件:

SELECT d.SparePartID, s.Name, d.Quantity, d.Price, d.OrderID , 
       fb.PFID, fb.Review, fb.Rating
FROM sparepartorderdetails d LEFT JOIN
     sparepartfeedback fb
     ON fb.OrderID = d.OrderID
        fp.SparePartID = d.SparePartID INNER JOIN
     sparepart s
     ON d.SparePartID= s.SparePartID INNER JOIN
     orders o
     ON o.OrderID = d.OrderID
WHERE d.OrderID = 86