2017-06-29 112 views
1

我寫此查詢查詢返回重複的行

SELECT DISTINCT 
    F2_FILIAL, F2_SERIE, F2_DOC, 
    C6_NUM, AB7_NUMOS, A1_NOME, F2_EMISSAO, F2_VALBRUT, F2_VEND1, 
    A3_NOME,F2_COND , E4_DESCRI, C5_NATUREZ, ED_DESCRIC, AAG_DESCRI 
FROM 
    SF2010 SF 
LEFT JOIN 
    SE4010 SE ON F2_COND = E4_CODIGO 
LEFT JOIN 
    SA3010 A3 ON F2_VEND1 = A3_COD 
LEFT JOIN 
    SA1010 A1 ON F2_CLIENTE = A1_COD 
LEFT JOIN 
    SD2010 SD ON F2_DOC = D2_DOC 
LEFT JOIN 
    SC6010 C6 ON D2_PEDIDO = C6_NUM 
LEFT JOIN 
    SC5010 C5 ON D2_PEDIDO = C5_NUM 
LEFT JOIN 
    SED010 ED ON C5_NATUREZ = ED_CODIGO 
LEFT JOIN 
    AB7010 AB ON SUBSTRING(C6_NUMOS,1,6) = AB7_NUMOS 
LEFT JOIN 
    AAG010 AG ON AB7_CODPRB = AAG_CODPRB 
WHERE 
    (F2_CLIENTE >= '  ' 
    AND F2_CLIENTE <= 'zzzzzz') 
    AND (F2_EMISSAO >= '20170222' 
     AND F2_EMISSAO <= '20170222') 
    AND (F2_VEND1 >= '' 
     AND F2_VEND1 <= 'zz') 
    AND (C5_NATUREZ >= '' 
     AND C5_NATUREZ <= 'zzzzzzzzzz') 
    AND (F2_COND >= '' 
     AND F2_COND <= 'zzz') 
    AND (F2_FILIAL >= '' 
     AND F2_FILIAL <= 'zz') 
    AND (SF.D_E_L_E_T_ <> '*') 
    AND F2_DUPL <> '' 
    AND F2_VALFAT <> 0 
ORDER BY 
    F2_VEND1, F2_EMISSAO 

而且它會導致這樣的事情:

query result

注意,最後2行是相同的(主要領域在這裏F2_DOC,它永遠不會出現兩次),但由於字段C6_NUM和AB7_NUMOS有多個引用,它會顯示它們兩個,複製該行。

當我加入的表有多個不同的FK到我正在查詢的表中時,如何改進我的查詢以不重複行?

+0

列'AB7_NUMOS'具有不同的值。這就是爲什麼它顯示2行。排除不必要的列。 – Eric

+0

@Eric是的,它有不同的值,但是這個列是必需的。理想的輸出是:如果它有多個值,只顯示第一個值。 –

+0

您可以使用'MAX(AB7_NUMOS)'。在這種情況下,它將顯示009854,因爲它具有較高的值。 – Eric

回答

0

如果您正在進行多個左連接,並且連接中的leftest表沒有(或未在選擇中提及)唯一值,則可能會得到重複的行。如果您需要有一個唯一的列,請在select語句內的leftest表中使用主鍵,或者向查詢添加一個如 row_number()的列作爲ID 。