【问题标题】:My Left Join Query in mySql gives duplicate results even after using DISTINCT?即使在使用 DISTINCT 之后,mySql 中的左连接查询也会给出重复的结果?
【发布时间】:2019-11-11 00:33:08
【问题描述】:

我尝试了许多解决方案来消除查询中的重复结果,但没有用。 这是我的表格:

sparepartorderdetails 表:

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

和备用反馈fb表:

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

现在这是我的 QUERY,它给出了重复的结果:

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 这样的订单没有评论/评级,则此查询给出 no duplicates,它只是正确显示订单详细信息和评论的 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

【问题讨论】:

  • 我没有看到“重复”的结果。每一行都非常不同。我想你问错问题了。您应该说明您想要做什么、您拥有的数据以及您想要的结果。
  • @GordonLinoff 查看我的结果表,其中 Lights and Mirrors 数据显示了两次,它是重复的
  • 我不在电脑前,所以我无法尝试游览代码。尝试在 Distinct(SparePartID) 等中使用专利权
  • “重复”不清楚。你也只说你得到了不想要的,你没有说你真正想要的。使用足够多的单词、句子和对部分示例的引用来清楚完整地表达你的意思。请在代码问题中提供minimal reproducible example--cut & paste & runnable code;具有期望和实际输出的示例输入(包括逐字错误消息);标签和明确的规范和解释。这包括您可以提供的最少代码,即您显示的代码可以通过您显示的代码扩展为不可以。 (调试基础。)

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


【解决方案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

【讨论】:

    猜你喜欢
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多