Veeshal Mali Ответов: 2

Sql JOIN дает повторные reocrds ?


Привет,
Я создал sp для некоторого вывода следующим образом, но я получаю повторные записи из своего sp. Я думаю, что я ставлю неправильные соединения в свой sp. Пожалуйста, решите мою проблему.

ALTER procedure [dbo].[GetSupplierToVendorDetails]
@did varchar(50)
as 
begin

SELECT ROW_NUMBER() OVER(ORDER BY  stvd.SrNo) AS SrNo, stvd.Product_Id, p.Product_Name, stvd.Quantity, vcd.Quantity AS DispatchedQty
FROM         Tbl_Dispatch_SupplierToVendor_Details AS stvd INNER JOIN
                      Tbl_ProductMaster AS p ON stvd.Product_Id = p.Product_Id INNER JOIN
                      Tbl_Dispatch_VendorToClient AS vc ON stvd.SupplierToVendor_Id = vc.SupplierToVendor_Id INNER JOIN
                      Tbl_Dispatch_VendorToClient_Details AS vcd ON vcd.VendorToClient_Id = vc.VendorToClient_Id
WHERE     (stvd.SupplierToVendor_Id = @did)


SrNo	Product_Id	Product_Name	Quantity	DispatchedQty
1	TVP2	      Bearing rod	  400	           200
2	TVP2	      Bearing rod	  400	           300
3	TVS1	        shaft	          500	           200
4	TVS1	        shaft	          500	           300


И я получаю результат, как указано выше. Но освобожденная из пут, как следующие
SrNo	Product_Id	Product_Name	Quantity	DispatchedQty
1	TVP2	      Bearing rod	  400	           200
2	TVS1	        shaft	          500	           300

Ниже приведено изображение структуры таблицы:
[Изображение Структуры Таблицы]

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

ALTER procedure [dbo].[GetSupplierToVendorDetails]
@did varchar(50)
as 
begin

SELECT ROW_NUMBER() OVER(ORDER BY  stvd.SrNo) AS SrNo, stvd.Product_Id, p.Product_Name, stvd.Quantity, vcd.Quantity AS DispatchedQty
FROM         Tbl_Dispatch_SupplierToVendor_Details AS stvd INNER JOIN
                      Tbl_ProductMaster AS p ON stvd.Product_Id = p.Product_Id INNER JOIN
                      Tbl_Dispatch_VendorToClient AS vc ON stvd.SupplierToVendor_Id = vc.SupplierToVendor_Id INNER JOIN
                      Tbl_Dispatch_VendorToClient_Details AS vcd ON vcd.VendorToClient_Id = vc.VendorToClient_Id
WHERE     (stvd.SupplierToVendor_Id = @did)

Tomas Takac

Очевидно, что это последнее соединение с Tbl_Dispatch_VendorToClient_Details, которое вызывает у вас проблемы. Вам нужно проанализировать данные, чтобы выяснить, почему.

Veeshal Mali

Я анализирую и заменяю это соединение другими соединениями. Но выход тот же, сэр...

jamuro77

Не могли бы вы добавить структуру таблиц, связанную с вашим запросом? Если нет,то это трудно понять...

Veeshal Mali

Ниже приводится изображение структуры таблицы, сэр...
нажмите на изображение

F-ES Sitecore

У вас есть две записи в таблице Tbl_Dispatch_VendorToClient_Details для этого VendorToclient_id, поэтому вы генерируете две строки соединения. Либо данные ошибочны, либо в Tbl_Dispatch_VendorToClient_Details есть что-то, что вам нужно использовать, чтобы определить, к какой из строк вы хотите присоединиться, то есть к строке "200" для несущего стержня, а не "300".

2 Ответов

Рейтинг:
8

jamuro77

Попробовать это:

ALTER procedure [dbo].[GetSupplierToVendorDetails]
@did varchar(50)
as 
begin
 
SELECT ROW_NUMBER() OVER(ORDER BY  stvd.SrNo) AS SrNo, stvd.Product_Id, p.Product_Name, stvd.Quantity, vcd.Quantity AS DispatchedQty
FROM         Tbl_Dispatch_SupplierToVendor_Details AS stvd INNER JOIN
                      Tbl_ProductMaster AS p ON stvd.Product_Id = p.Product_Id INNER JOIN
                      Tbl_Dispatch_VendorToClient AS vc ON stvd.SupplierToVendor_Id = vc.SupplierToVendor_Id INNER JOIN
                      Tbl_Dispatch_VendorToClient_Details AS vcd ON vcd.VendorToClient_Id = vc.VendorToClient_Id and 
vcd.Product_id=stvd.Product_Id
WHERE     (stvd.SupplierToVendor_Id = @did)


Рейтинг:
17

jamuro77

Я бы сказал, что join with" Tbl_Dispatch_VendorToClient_Details "table нуждается в новой связи с" product_id", связанной с" Tbl_Dispatch_SupplierToVendor_Details", но это трудно узнать, не зная структуры таблиц...