Pagina 1 di 1

[Risolto] Tabelle in relazione: query vuota se campo vuoto

Inviato: sabato 4 luglio 2020, 11:55
da markinson
Salve di nuovo! :)

Dalle tabelle, ai formulari, adesso sono alle query/ricerche sulla base di dati. :shock:
Sicuramente ho commesso degli errori nella progettazione, che adesso stanno venendo a galla e, in qualche modo, devo cercare di porre rimedio.

Cercherò di spiegare la questione nel modo più chiaro, anche se la vedo un po' complessa (per me).

Ho due tabelle, poste in relazione 1 a molti.
La tabella principale (1) riguarda il singolo fascicolo/procedimento; la tabella secondaria (n) considera le varie fasi del procedimento, tante nel tempo, in cui il fascicolo può trovarsi.

Nella tabella principale vi sono due campi importanti: pratica correntemente attiva e pratica da gestire (entrambi di tipo boolean). Quando sono tutti e due su "sì" la query mi deve estrarre il fascicolo, con tutte le fasi del procedimento nel tempo succedutesi (in futuro proverò ad estrarre solo l'ultima fase, quella più recente).

Questa è l'immagine della struttura della query:
AOO_Query_Stato procedimento_000.jpg
Alla fine ho risolto, però volevo condividere cosa ho combinato per arrivare alla conclusione per me temporaneamente soddisfacente, così da capire dove ho sbagliato, perché da qualche parte ho sbagliato.

Infatti, lanciata la query ottenevo come risultato soltanto i fascicoli/procedimenti per cui vi era stato un movimento nella tabella secondaria (molti) dello stato del procedimento. I fascicoli, sebbene correnti e da gestire, che non avessero avuto nella tabella secondaria in relazione (molti) alcun record non venivano estratti.

Sono dunque intervenuto, attraverso un formulario appositamente creato, sulla tabella secondaria in relazione (molti) per inserire, ad esempio, come stato del procedimento il primo valore della casella di riepilogo associata al campo, che nel caso di specie è un valore vuoto-nullo. Fatto questo e lanciata nuovamente la query ho visualizzato anche i record principali lato "1" che sul lato "molti (n)" non avevano specifici stati del procedimento (meglio: avevano come stato del procedimento il valore "vuoto").

Ho pensato allora che introducendo un valore di default "vuoto" nel campo "stato del procedimento", definito come "Testo [VARCHAR]", potesse risolvere la questione.
AOO_Query_Stato procedimento_001.jpg
Tuttavia non ho compreso effettivamente quale parametro passare: '', NULL o EMPTY?
Ho cercato di decifrare il post [Solved] Set a default Value as a Blank Space, ma mi sono perso.

Nella realtà, e concludo riassumendo, può capitare che io inserisca ogni informazione relativa al fascicolo, spunti i campi booleani "pratica correntemente attiva" e "pratica da gestire", ma nulla sia immediatamente inserito nella tabella secondaria (in relazione "molti").
Lanciata la query devo poter comunque vedere questo fascicolo/procedimento, sebbene la tabella secondaria non sia stata ancora popolata con alcun valore.

Grazie ... perché so che l'ho fatta lunga e so pure di non essermi spiegato in maniera semplice. :oops:

Re: Tabelle in relazione: query vuota se campo vuoto

Inviato: sabato 4 luglio 2020, 13:52
da markinson
Ho creato un dbase di "servizio", per cercare di spiegarmi meglio.

La funzione di questo semplicissimo dbase è quella di registrare i comuni da visitare, per particolari attrazioni che possono presentare.
Ora, cliccando sul campo booleano "Da visitare" e interrogando poi con una query la base di dati, vorrei poter ottenere sia i luoghi/comuni per cui ho specificato cosa andare a vedere (centro storico, museo, teatro, etc.) sia i luoghi/comuni per cui non ho specificato cosa visitare.

Invece, con la query come da me strutturata riesco a vedere soltanto quei luoghi per cui ho sì selezionato il campo "Da visitare", ma anche popolato cosa visitare.

Re: Tabelle in relazione: query vuota se campo vuoto

Inviato: sabato 4 luglio 2020, 13:58
da Zago_87
Sinceramente si, non sono sicuro di aver capito perché la faccenda sembra più intricata di quello che è. Almeno a me fa comodo vedere il codice SQL e non la struttura per capire bene che cosa stai facendo di preciso.

Credo comunque di aver capito e credo il problema stia nella JOIN tra le due tabelle, ti consiglio quindi di verificare il codice e cercarti in rete la differenza tra INNER JOIN e LEFT JOIN, perché la soluzione che hai trovato, per quanto funzionale credo complichi e rallenti solo il tutto.

Facci sapere...e se invece non ho capito nulla o vuoi info più dettagliate allega un DB di esempio o almeno il codice SQL ;)
 Editato: Abbiamo postato assieme...verifico subito nel DB che hai allegato 
PS: quella sensazione che arriva dopo un po' di aver progettato male il DB la conosco bene, io ad un certo punto, prima che il DB diventasse troppo grande e complesso, l'ho rifatto da capo eliminando tutti i problemi di cui mi ero reso conto, rimettendo in dati nelle tabelle in ordine (avevo aggiunto tante colonne con il tempo e averle ordinate mi ha semplificato un po' le cose andando avanti ad esempio), sfruttando tutte le cose imparate per semplificare e migliorare. Ti consiglio di valutare la cose prima che sia "troppo tardi", per me ne è valsa la pena.

Re: Tabelle in relazione: query vuota se campo vuoto

Inviato: sabato 4 luglio 2020, 14:54
da Zago_87
Anche se non ho ben capito come è strutturato questo DB, visto velocemente non mi torna molto, prova questo codice:

Codice: Seleziona tutto

SELECT "tbl_ComuniInGenerale"."Comune", "tbl_ComuniInGenerale"."Provincia", "tbl_ComuniInGenerale"."Regione",
"DaVisitare"."DaVisitare", "CosaVedere"."CosaVedere"
FROM "tbl_ComuniInGenerale"
JOIN "tbl_ComuniDaVisitare" AS "DaVisitare" ON "tbl_ComuniInGenerale"."ID" = "DaVisitare"."ID"
LEFT JOIN "tbl_CosaVedere" AS "CosaVedere" ON "tbl_ComuniInGenerale"."ID" = "CosaVedere"."ComuniDaVisitare"
Fammi sapere se ottieni quello che vuoi

Re: Tabelle in relazione: query vuota se campo vuoto

Inviato: sabato 4 luglio 2020, 14:56
da charlie
Confermo.
Schermata 2020-07-04 alle 14.52.08.png

Re: Tabelle in relazione: query vuota se campo vuoto

Inviato: sabato 4 luglio 2020, 18:48
da markinson
G-R-A-N-D-I !!! ... e G-R-A-Z-I-E !!!
Avete centrato il problema: la soluzione nel mio caso prevedeva di impostare una "Relazione destra", come avete anticipato.
:super: