[RISOLTO] Creare query tra due tabelle (relazionate) e far apparire anche righe con valore NULL

di Anonimizzato9867 il
7 risposte
Ciao Ragazzi, come va? Spero tutto bene.
Come da titolo, avrei la necessità di creare una query dove mi dovrebbero uscire anche campi NULL (oltre ai campi con valori)
Mi spiego meglio:

Ho una tabella DETTAGLI composta da IDFOTO-IDMODELLO-DESCRIZIONE-FOTODETTAGLI
Ho una tabella MODELLI composta da IDMODELLO-NOMEMODELLO-FOTOMODELLO-ecc

La relazione è [MODELLI]IDMODELLO 1->molti [DETTAGLI]IDMODELLO

Tramite una maschera creo il MODELLO (inserendo nome e foto)
Tramite un pulsante, entro in un'altra maschera, filtrata, dove posso inserire DESCRIZIONE-FOTODETTAGLI.

Posso anche creare i MODELLI ma senza inserire i dettagli.

Vorrei una query che mi elencasse TUTTI i NOMEMODELLO[MODELLI] e il conteggio di IDFOTO[DETTAGLI] anche se non sono presenti IDFOTO (quindi pari a zero o null). E' possibile?

Io ho creato una query di raggruppamento e ho messo IDFOTO-(tab Dettagli)-conteggio --- NOMEMODELLO(tab MODELLI)-Raggruppamento

Ma mi esce filtrato, ovvero solo dove i campi sono pieni.

Allego foto

7 Risposte

  • dark ha scritto:


    Vorrei una query che mi elencasse TUTTI i NOMEMODELLO[MODELLI] e il conteggio di IDFOTO[DETTAGLI] anche se non sono presenti IDFOTO (quindi pari a zero o null).
    Zero non è Null. Se arrivi ad avere uno zero significa che in un modo o nell'altro hai già lavorato per sostituire Null con Zero.
    LEFT JOIN, funzione Nz() o IIf con verifica nel Null.
    Trovi quasi tutto qui: https://www.iprogrammatori.it/forum-programmazione/access/generazione-record-vuoto-sottomaschera-t45385.html
  • In realtà lo zero è impossibile dato che si tratta di un ID con chiave primaria...
  • Ho letto quel tread ma sinceramente non ci ho capito granché troppo incasinata la discussione
  • dark ha scritto:


    Ho letto quel tread ma sinceramente non ci ho capito granché troppo incasinata la discussione
    L'indicazione dell'uso di LEFT JOIN e di IIF per gestire i Null sono validi comunque. Là trovavi anche qualche una bozza d'uso e un link di riferimento.
  • Si infatti, stavo vedendo quel link ma forse commetto qualche errore
  • dark ha scritto:


    Si infatti, stavo vedendo quel link ma forse commetto qualche errore
    Quando ritieni di aver provato a sufficienza e continui a non uscirne, pubblica quello che hai fatto (in pratica la SQL della query) e vediamo di risolvere l'errore. Se invece dopo aver provato a sufficienza ci riesci da solo, pubblica lo stesso quello che hai fatto così chi legge ed ha lo stesso problema vede come l'hai affrontato tu.
  • Fatto:
    In pratica ho letto e riletto il post da te linkato e ho cambiato il tipo di JOIN da tipo1 a tipo2 (INNER a LEFT). Così facendo mi ha restituito 0 dove non ci sono IDFOTO

    CODICE VECCHIO:
    SELECT Count(Dettagli.IDfoto) AS ConteggioDiIDfoto, Modelli.Nomemodello
    FROM Modelli INNER JOIN Dettagli ON Modelli.IDmodello = Dettagli.IDmodello
    GROUP BY Modelli.Nomemodello
    ORDER BY Modelli.Nomemodello;
    
    CODICE NUOVO, FUNZIONANTE:
    SELECT Count(Dettagli.IDfoto) AS ConteggioDiIDfoto, Modelli.Nomemodello
    FROM Modelli LEFT JOIN Dettagli ON Modelli.IDmodello = Dettagli.IDmodello
    GROUP BY Modelli.Nomemodello
    ORDER BY Modelli.Nomemodello;
    Grazie mille per le dritte.
Devi accedere o registrarti per scrivere nel forum
7 risposte