Próbuję wykonać sprzężenie w ramach 4 tabel, ale zwraca zduplikowane wiersze. Niektóre pozycje mogą nie istnieć w tabelach Sales i Inventory. Co należy zrobić, aby rozwiązać problem;
ProductList (potrzebujemy wszystkich elementów)
Item_ID
ProductDetail (zawiera zwrot wszystkich pasujących pozycji z listy produktów)
Item_ID
Product_Name
Sprzedaż (musi zwrócić wszystkie pasujące elementy z listy produktów)
Item_ID
Sales_Qty
Inwentarz
Item_ID
Remaining_Qty
PRZYKŁADOWE DANE
Lista produktów
Item_Id
--------
0001
0002
0003
0004
Szczegóły produktu
Item_Id Product_Name
-----------------------
0001 Eraser
0002 Pencil
0003 Pen
0004 Mouse
0005 Keyboard
0006 Monitor
0007 Cable
Sprzedaż
Item_ID Sales_Qty
--------------------
0001 15
0002 20
0004 50
0005 60
0006 45
Inwentarz
Item_ID Remaining
-------------------
0001 100
0002 95
0003 55
0005 101
0006 13
0007 18
Pożądane wyjście:
Item_Id Item_Name Sales_Qty Remaining_Qty
--------------------------------------------------
0001 Eraser 15 100
0002 Pencil 20 95
0003 Pen 0 55
0004 Mouse 50 0
Moje zapytanie:
SELECT *
FROM ProductList a
INNER JOIN ProductDetail b ON a.Item_ID = b.ItemID
LEFT JOIN Sales c ON a.Item_Id = c.Item_ID
LEFT JOIN Inventory d ON a.Item_ID = d.Item_ID
2 odpowiedzi
Możesz użyć DISTINCT
SELECT DISTINCT a.Item_ID, *
FROM ProductList a
INNER JOIN ProductDetail b
ON a.Item_ID = b.ItemID
LEFT JOIN Sales c
ON a.Item_Id = c.Item_ID
LEFT JOIN Inventory d
ON a.Item_ID = d.Item_ID
Spróbuj tego:
SELECT a.Item_Id, b.product_Name, c.Sales_Qty, d.Remaining_Qty
FROM ProductList a
LEFT JOIN ProductDetail b
ON a.Item_ID = b.Item_ID
LEFT JOIN Sales c
ON a.Item_Id = c.Item_ID
LEFT JOIN Inventory d
ON a.Item_ID = d.Item_ID
Spowoduje to wytworzenie tego wyjścia:
Item_Id product_Name Sales_Qty Remaining_Qty
---------------------------------------------------
0001 Eraser 15 100
0002 Pencil 20 95
0003 Pen NULL 55
0004 Mouse 50 NULL
Jeśli nie chcesz, aby zwracane były wartości null, użyj COALESCE (jeśli twoja baza danych jest serwerem sql, możesz użyć ISNULL zamiast COALESCE), jak pokazano poniżej:
SELECT a.Item_Id, b.product_Name, COALESCE(c.Sales_Qty, 0), COALESCE(d.Remaining_Qty, 0)
FROM ProductList a
LEFT JOIN ProductDetail b
ON a.Item_ID = b.Item_ID
LEFT JOIN Sales c
ON a.Item_Id = c.Item_ID
LEFT JOIN Inventory d
ON a.Item_ID = d.Item_ID
Spowoduje to wytworzenie tego wyjścia:
Item_Id Item_Name Sales_Qty Remaining_Qty
--------------------------------------------------
0001 Eraser 15 100
0002 Pencil 20 95
0003 Pen 0 55
0004 Mouse 50 0
Podobne pytania
Nowe pytania
sql
Structured Query Language (SQL) to język służący do wykonywania zapytań w bazach danych. Pytania powinny zawierać przykłady kodu, strukturę tabeli, przykładowe dane i znacznik używanej implementacji DBMS (np. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 itp.). Jeśli Twoje pytanie dotyczy wyłącznie konkretnego DBMS (używa określonych rozszerzeń / funkcji), użyj zamiast tego tagu tego DBMS. Odpowiedzi na pytania oznaczone tagiem SQL powinny używać standardu SQL ISO / IEC.
Item_ID
pojawia się więcej niż raz w co najmniej jednej połączonej tabeli. Musisz zastanowić się, jak chcesz rozwiązać te duplikaty? Weź pierwszy wiersz, zsumuj wartości, uśrednij wartości itp. Lub jeśli są to naprawdę zduplikowane wartości, możesz użyćSELECT DISTINCT...