Buongiorno,
vorrei sapere se in questo caso è possibile riuscire a utilizzare una Query ricerca dati non corrispondenti oppure c'è qualche altra strada.
Ci sono 3 tabelle: Ordini, DDT, Prodotto
• Ordini è in relazione n:n con Prodotto
• Ordini è in relazione n:n con DDT
• DDT è in relazione n:n con Prodotto
Nel momento che devo fare delle normalissime query, query a campi incrociati non ho problemi.
Query 1: voglio vedere per ciascun ordine i prodotti associati e i relativi ddt associati --> OK, funziona
Da qui in avanti si sviluppano una serie di query che hanno lo scopo di aiutarmi nelle scelte dell’ordine e dei prodotti da associare al DDT in esame. In breve, tramite diversi parametri andrò a visualizzare nelle maschere solamente gli ordini “incompleti” e i prodotti ad essi relativi ancora da consegnare.
Ora arriva il problema: tramite una query a campi incrociati voglio vedere tutta la lista di ordini (con relativi prodotti) MA che non hanno ancora un DDT associato.
Faccio un esempio per semplicità
L’ Ordine (37) contiene i prodotti (A), (B), (C) ed è associato al DDT 100. C’è però un MA.
Nel momento che faccio la query 1 cosa vedo? Ordine 37 associato ai prodotti A, B spediti tramite DDT 100 --> ok, funziona.
SELECT OrdineProdotto.IDProdotto, Ordini.ID_Ordini, OrdineProdotto.Qta, DDT.ID_DDT, DDTProdotto.qta
FROM Ordini INNER JOIN ((DDT INNER JOIN (OrdineProdotto INNER JOIN DDTProdotto ON OrdineProdotto.IDProdotto = DDTProdotto.idProdotto) ON DDT.ID_DDT = DDTProdotto.idDDT) INNER JOIN OrdineDDT ON DDT.ID_DDT = OrdineDDT.ID_DDT) ON (Ordini.ID_Ordini = OrdineProdotto.ID_Ordine) AND (Ordini.ID_Ordini = OrdineDDT.IDOrdine);
IDProdotto-------- ID_Ordini----------------OrdineProdotto.qta-------------ID_DDT----------------DDTProdotto.qta
A -------------------------37 -------------------------2 -------------------------100 -------------------------2
B -------------------------37 -------------------------8 ------------------------- 100 -------------------------2
Quindi l’ordine 37 è associato al DDT 100 ma sono stati giustamente associati solo due prodotti su tre (il terzo, C, non l'ho ancora associato).
Tramite query a campi incrociati dico: mostrami tutti quegli ordini (e relativi prodotti) che sono senza DDT.
Query 2
SELECT [11_Ordini].IDProdotto, [11_Ordini].ID_Ordini, [11_Ordini].Qta, OrdineDDT.ID_DDT
FROM 11_Ordini LEFT JOIN OrdineDDT ON [11_Ordini].[ID_Ordini] = OrdineDDT.[IDOrdine]
WHERE (((OrdineDDT.ID_DDT) Is Null));
Qui sotto mostro il risultato della query mostrando tutti i risultati (sia con DDT che senza DDT)
IDProdotto--------ID_Ordini----------------Qta----------------D_DDT
A ------------------37 --------------2 --------------100
C -----------------37 -----------------6 -----------------100
B -----------------37 -----------------8 -----------------100
Tra i risultati dovrei visualizzare (Ordine 37 --> prodotto C) MA SENZA il DDT questo perchè C sebbene faccia parte dell'ordine 37 non ha ancora un DDT.
Il problema è che il sistema la vede cosi: mostrami tutti i prodotti associati a quell' ordine, mostrami poi il DDT associato a quell’ordine. Ne deriva che nella query il prodotto C è associato al DDT 100
ANCHE SE nel momento che interrogo la tabella n:n che c’è tra prodotti e DDT vedo solamente i due prodotti (A) e (B) come è giusto che sia.
Tutte le query successive sono corrette solo che nel momento che faccio l'UNION tra la query 1 e la 2.1 (è la successiva alla 2 che non ho riportato) il prodotto C è sparito e quindi non posso associarlo a nessun DDT.
Più semplice di così non so come spiegarla
L'ho provata in divelse salse ma ritorno sempre allo stesso punto, altre idee non ne ho più.
Se avete suggerimenti sono ben lieto di ascoltarli.
Grazie