Member 10660835 Ответов: 1

Как удалить дублирующуюся запись из результатов выполнения left join в SQL


Цитата:
У меня есть три таблицы: таблица пользователей,таблица запросов и таблица активности .когда я делаю внутреннее и левое соединение, я получаю дубликаты записей из-за нулевых значений.

Таблица -1


user_id | user_firstName | user_lastName

1 | Джо | Смит

2 | Джон | Доу

3 | Роберт | Смит

Таблица Запросов -2


EnquiryID | CreatedBy| |
1 | 1 |
2 | 1 |

Таблица Активности - 3


Значение Activityid | Обработки| AssignedBy| Кому Назначено|

1 | 1 | null | null |

2 | 1 | 2 | 3 |

Ожидаемый результат всех трех комбинирующих результатов таков

Идентификатор запроса | | CreatedBy| AssignedBy| AssignedTO|

1 | Джо | нуль | нуль |

2 | Джо | Джон | Робер |

язык SQL:

Выберите отчетливый Е. EnquirdID как дознание,У. имя как создано ,У1.Имя как AssignedBY , У2, "имя", как кому назначено
В запросе е внутреннее соединение пользователей U на Е. имя пользователя = имя пользователя У.
внутреннее соединение активности е. запрос = А. EnquiryID
Слева присоединитесь к пользователю U1 на A. AssignedBY = U1.UserID
Левое соединение пользователей на А. кому назначено У2 = У2.ID пользователя

Я получаю дубликат записи запроса сверху запроса, даже если использую Distinct для EnquiryID




Что я уже пробовал:

SELECT DISTINCT E.EnquirdID as Enquiry,U.FirstName as CreatedBY ,U1.FirstName as AssignedBY  , U2,FirstName as AssignedTO
FROM Enquiry E inner join User U on E.UserID = U.UserID
               inner join Activity A on E.Enquiry = A.EnquiryID
               Left Join User U1  on A.AssignedBY = U1.UserID
               Left Join User U2 on  A.AssignedTO = U2.UserID

I am getting duplicate Enquiry record  from above query even though using Distinct for EnquiryID

F-ES Sitecore

Не уверен, что я полностью понимаю этот вопрос, но если вы не хотите получать нулевые результаты, то используйте "join", а не "left join"

Member 10660835

я получаю дубликаты записей с моим запросом, который я упомянул с моими вышеприведенными данными..

как избежать дублирования записей

MadMyche

Если вы используете внутреннее соединение, то оно не вернет нулевые результаты.
Или вы могли бы добавить Где (У1.Имя пользователя не равно null)

1 Ответов

Рейтинг:
12

Bryian Tan

Опубликованный код кажется нормальным, возможно, вы не разместили правильное содержимое таблицы/схему для нас, чтобы реплицировать проблему. Ниже приведен пример использования опубликованных данных и схемы изменения в соответствии с запросом, и все они дают одинаковые результаты. Я думаю, что, возможно, вы не разместили достаточно информации или ваш SQL-запрос присоединился к неправильному столбцу. Это трудно сказать, потому что ваш предоставленный запрос не соответствует схеме.


DECLARE @user TABLE (
	UserID INT,
	FirstName  VARCHAR(50),
	LastName  VARCHAR(50)
)

DECLARE @Enquiry TABLE (
	EnquiryID  INT,
	CreatedBy  INT
)

DECLARE @Activity TABLE (
	ActivityID   INT,
	CreatedBy  INT,
	AssignedBy  INT NULL,
	AssignedTO  INT NULL,
	EnquiryID  INT
)

INSERT INTO @user
	SELECT 1,'Joe','Smith' UNION
	SELECT 2,'John ','Doe' UNION
	SELECT 3,'Robert ','Smith'

INSERT INTO @Enquiry
	SELECT 1,1 UNION
	SELECT 2,1

INSERT INTO @Activity
	SELECT 1,1,NULL,NULL,1 UNION
	SELECT 2,1,2,3,2

--without using Enquiry table
SELECT a.EnquiryID, cb.FirstName, ab.FirstName, at.FirstName FROM @Activity a 
	JOIN @user cb ON a.CreatedBy = cb.UserID
	LEFT JOIN @user ab ON a.AssignedBy = ab.UserID	
	LEFT JOIN @user at ON a.AssignedTO = at.UserID	

--using Enquiry table
SELECT e.EnquiryID, eu.FirstName 'CreatedBy' ,ab.FirstName 'AssignedBy',  at.FirstName 'AssignedTO'
	FROM @Enquiry e
	JOIN @user eu ON e.CreatedBy = eu.UserID
	JOIN @Activity a ON e.EnquiryID = a.EnquiryID
	LEFT JOIN @user ab ON a.AssignedBy = ab.UserID	
	LEFT JOIN @user at ON a.AssignedTO = at.UserID	

--Using your query with small modification to the table schema
SELECT DISTINCT E.EnquiryId as Enquiry,U.FirstName as CreatedBY ,U1.FirstName as AssignedBY , U2.FirstName as AssignedTO
FROM @Enquiry E inner join @user U on E.CreatedBy = U.UserID
inner join @Activity A on E.EnquiryId = A.EnquiryID
Left Join @user U1 on A.AssignedBY = U1.UserID
Left Join @user U2 on A.AssignedTO = U2.UserID


EnquiryID	FirstName	FirstName	FirstName
1	Joe	NULL	NULL
2	Joe	John 	Robert