Ho una tabella padre Orders
e una tabella Figlio Jobs
con i seguenti dati di esempio
Voglio selezionare gli Ordini in base ai seguenti requisiti
1>Per ogni ordine non può essere 0 o più posti di lavoro. Non selezionare l'ordine in se non ha alcun lavoro.
2>Un utente può lavorare su più di un lavoro che appartiene allo stesso ordine.
Per esempio Utente 1
può lavorare in posti di Lavoro che appartiene all'Ordine 1 e 2, perché ha già lavorato sui posti di lavoro 1
e 4
dello stesso ordine.
3>selezionare Solo gli ordini che hanno un lavoro, in Requested
stato
Ho la seguente query che mi dà il risultato atteso
DECLARE @UserID INT = 2
SELECT O.OrderID
FROM Orders O
JOIN Jobs J ON J.OrderID = O.OrderID
WHERE
J.JobStatus = 'Requested' AND
NOT EXISTS
(
--Must not have worked this Order
SELECT 1 FROM Jobs J1
WHERE J1.OrderID = O.OrderID AND J1.UserID = @UserID
)
Group By o.OrderID
Query di join il Jobs
tabella due volte. Sto cercando di ottimizzare le query e alla ricerca di un modo per ottenere il risultato previsto utilizzando Jobs
tabella una sola volta, se possibile. Qualsiasi altra soluzione è anche apprezzato. Posso modificare lo schema della tabella, se necessario.
Tabella jobs ha quasi 20M righe e qualche tempo query mostra un peggioramento delle prestazioni. (Sì, abbiamo guardato gli indici). Credo proprio che la scansione dei lavori tabella due volte causando il problema di prestazioni.
ID
di tipo int. Solo per la comprensione scopo l'ho tenuta come nvarchar