Query ricerca dati non corrispondenti

di il
4 risposte

Query ricerca dati non corrispondenti

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

4 Risposte

  • Re: Query ricerca dati non corrispondenti

    Se può servire questa è la query 1 semplificata che svolge sempre la stessa funzione.
    Sto usando le tabelle n:n.
    Non riesco a capire come fare la queri di ricerca campi non corrispondenti
    FROM OrdineDDT INNER JOIN (DDTProdotto INNER JOIN OrdineProdotto ON DDTProdotto.idProdotto = OrdineProdotto.IDProdotto) ON (OrdineProdotto.ID_Ordine = OrdineDDT.IDOrdine) AND (OrdineDDT.ID_DDT = DDTProdotto.idDDT);
    

    [/url]
  • Re: Query ricerca dati non corrispondenti

    Invece di arrovellarti il cervello in SQL, lo sai che esiste la procedura guidata per la "query ricerca dati non corrispondenti"?
  • Re: Query ricerca dati non corrispondenti

    Lo so che esiste. Il problema è che usandola, come scrivevo nel primo post, non ottengo il risultato ottenuto
  • Re: Query ricerca dati non corrispondenti

    In via del tutto ipotetica, esiste la possibilità di fare in questo modo con la query ricerca dati non corrispondenti ?
    Non riesco ad uscirne.
    Ci sono tre campi, ad esempio: Prodotto, Ordini, DDT

    Mostrami tutti gli Ordini e i relativi Prodotti associati (rettangolo verde) e nel contempo NON mostrami il campo ID_DDT anche se Ordine ha un DDt associato.
    Nell'esempio il 2 - 37 non dovrebbe avere il DDT in quanto sebbene l'ordine 37 sia associato anche ad un DDT, il prodotto 2 dell'ordine 37 non ce l'ha.



    Nel momento che faccio una norma query per vedere solo quegli ordini con relativi prodotti giù spediti tutto funziona.
Devi accedere o registrarti per scrivere nel forum
4 risposte