2017-10-18 2 views
1

donc j'ai trouvé une duplication de données après l'exécution de cette requêteDuplication dans la sortie de requête SQL

SELECT PRHA.REQUISITION_NUMBER REQUISITION_NUMBER, 
PRLA.LINE_NUMBER LINE_NUMBER, 
PRLA.QUANTITY QUANTITY, 
PRLA.UNIT_PRICE UNIT_PRICE, 
PRLA.UNIT_PRICE*PRLA.QUANTITY AMOUNT, 
ESIV.ITEM_NUMBER ITEM_NUMBER, 
ESIV.DESCRIPTION DESCRIPTION, 
UOM.DESCRIPTION UNIT_OF_MEASURE 

FROM EGP_SYSTEM_ITEMS_VL ESIV, 
POR_REQUISITION_LINES_ALL PRLA, 
POR_REQUISITION_HEADERS_ALL PRHA,INV_UNITS_OF_MEASURE_VL UOM 

WHERE PRHA.REQUISITION_HEADER_ID=PRLA.REQUISITION_HEADER_ID 
AND PRLA.ITEM_ID=ESIV.INVENTORY_ITEM_ID 
AND UOM.UOM_CODE = PRLA.UOM_CODE 
AND PRHA.REQUISITION_NUMBER=:PR_NUMBER 

comment le résoudre?

+3

Je ne sais pas qui est l'enseignement vous pouvez joindre des tables comme cela, mais vous devriez demander votre argent et apprendre la syntaxe EXPLICIT JOIN – JohnHC

+0

Vous pouvez essayer de réduire votre requête pour voir quelle jointure introduit des doublons. Peut-être que votre situation est l'absence de conditions. – 1010

Répondre

1

Si la ligne entière est un double, utilisez DISTINCT

select DISTINCT -- removes duplicates iff the entire row matches another 
     PRHA.REQUISITION_NUMBER REQUISITION_NUMBER, 
     PRLA.LINE_NUMBER LINE_NUMBER, 
     PRLA.QUANTITY QUANTITY, 
     PRLA.UNIT_PRICE UNIT_PRICE, 
     PRLA.UNIT_PRICE*PRLA.QUANTITY AMOUNT, 
     ESIV.ITEM_NUMBER ITEM_NUMBER, 
     ESIV.DESCRIPTION DESCRIPTION, 
     UOM.DESCRIPTION UNIT_OF_MEASURE 

from EGP_SYSTEM_ITEMS_VL ESIV 
inner join POR_REQUISITION_LINES_ALL PRLA -- explicit join syntax for the 21st century 
    on PRLA.ITEM_ID=ESIV.INVENTORY_ITEM_ID 
inner join POR_REQUISITION_HEADERS_ALL PRHA 
    on PRHA.REQUISITION_HEADER_ID=PRLA.REQUISITION_HEADER_ID 
inner join INV_UNITS_OF_MEASURE_VL UOM 
    on UOM.UOM_CODE = PRLA.UOM_CODE 

where PRHA.REQUISITION_NUMBER=:PR_NUMBER 

S'il est juste une partie de la ligne, par exemple, certaines colonnes, puis les données post échantillons de toutes les tables