My Left Join Query в mySql дает повторяющиеся результаты даже после использования DISTINCT? - PullRequest
0 голосов
/ 29 июня 2019

Я пробовал много решений, чтобы избавиться от дубликатов результатов в 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

и таблица запасных частей 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 , он просто правильно отображает детали заказа и значения 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 Ответ

1 голос
/ 29 июня 2019

Я думаю, что вы оставили условие 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...