0

私の SQL クエリは本当に時間がかかるので、もっと良い書き方があるのではないかと考えました。

テーブル「Vorgangdetails」には、「RecId」に番号を持つアイテムがあります。この番号は、"WeiterfuehrungVonPos" の別の行にある可能性があります。その場合、この新しい行の "RecId" に番号があり、"WeiterfuehrungVonPos" の別の行にある可能性があります ... (全体で最大 3 回) クエリに時間がかかりすぎます。より速い方法を知っていますか?

SELECT 
    SUM(VD_AB.Menge) AS Amount,
    Artikel.Artikelnummer AS Artikelnummer,
FROM Artikel

    INNER JOIN Vorgangdetails AS VD_AB
        ON LEFT(VD_AB.Auftrag, 3) = 'AF-'
        AND Artikel.Artikelnummer = VD_AB.Artikel

--> VD_AB と同じテーブルから最大 1 つの結果を追加

    LEFT JOIN Vorgangdetails AS VD_L
        ON LEFT(VD_L.Auftrag, 3) = 'LF-'
        AND Artikel.Artikelnummer = VD_L.Artikel
        AND VD_L.WeiterfuehrungVonPos = VD_AB.RecId

--> 再度 ... VD_AB と同じテーブルから最大 1 つの結果を追加

    LEFT JOIN Vorgangdetails AS VD_RvL
        ON VD_L.RecID = VD_RvL.WeiterfuehrungVonPos
        AND LEFT(VD_RvL.Auftrag, 3) = 'RE-'

--> 再度 ... VD_AB と同じテーブルから最大 1 つの結果を追加

    LEFT JOIN Vorgangdetails AS VD_RvAB
        ON VD_AB.RecID = VD_RvAB.WeiterfuehrungVonPos
        AND LEFT(VD_RvAB.Auftrag, 3) = 'RE-'

WHERE (VD_RvAB.Auftrag = '' AND VD_RvL.Auftrag = '')

GROUP BY(Artikelnummer)

. .

Final RESULT) -------------- Roman Pekar からのすべての回答を反映するように編集

SELECT 
    SUM(VD_AB.Menge) AS Auftragsmenge,
    Artikel.Artikelnummer AS Artikelnummer,
FROM Artikel
    INNER JOIN Vorgangdetails AS VD_AB
        ON VD_AB.Auftrag LIKE 'AB-%'
        AND Artikel.Artikelnummer = VD_AB.Artikel
    LEFT JOIN Vorgangdetails AS VD_L
        ON Artikel.Artikelnummer = VD_L.Artikel
        AND VD_L.WeiterfuehrungVonPos = VD_AB.RecId
        AND (VD_L.Auftrag LIKE 'LF-%' OR VD_L.Auftrag LIKE 'RE-%')
    LEFT JOIN Vorgangdetails AS VD_RvL
        ON VD_L.Auftrag is not null
        AND VD_L.Auftrag LIKE 'LF-%'
        AND VD_L.RecID = VD_RvL.WeiterfuehrungVonPos
        AND VD_RvL.Auftrag LIKE 'RE-%'
WHERE (Artikel.Kategorie = 'KARSTADT->Aktive')
    AND (VD_L.Auftrag LIKE 'LF-%' AND VD_RvL.Auftrag = '')
    AND NOT (VD_L.Auftrag LIKE 'RE-%')
GROUP BY(Artikelnummer)
4

1 に答える 1