[Gfoss] Spatialite creare tabella con join ed escludere colonne nulle

a.furieri a lqt.it a.furieri a lqt.it
Ven 28 Mar 2014 19:07:14 CET


On Fri, 28 Mar 2014 05:54:53 -0700 (PDT), NicoPez wrote:
> Rieccomi qua, ho letto un po' di cose sul web ma non trovo la 
> soluzione
>
> Ho scaricato l'interessante tool spatialite_gui e vi dico la verità è 
> la
> prima volta che lo uso. Però sembra molto intuitivo. Ora vi spiego 
> cosa
> vorrei fare.
>
> In Spatialite_gui ho caricato due file:
> 1. layer shape A (quindi contiene informazioni geometriche)
> 2. dbf B (molto vasto)
>
> Devo creare una nuova tabella che comprenderà tutte le colonne sia di 
> A che
> di B, facendo il LEFT JOIN attraverso la colonna comune IdCatasto.
> Se oltre a fare ciò dovrei fare in modo di non includere le colonne 
> di B che
> sono interamente nulle, come faccio? Mi sa che mi sono perso nei 
> meandri dei
> codici SQL.. :p
>

scusa, me perche' hai deciso di usare proprio LEFT JOIN invece di JOIN 
?
hai qualche buon motivo e lo hai fatto a ragion veduta ?

giusto come richiamo:
- JOIN: include nel resultset *solo* le righe che esistono su entrambe
   le tavole, sia in quella "lato sinistro" che in quella "lato destro"
   (per capirsi meglio: nel tuo caso A e' "sinisto", e B e' "destro").
- LEFT JOIN: include nel resulset *anche* tutte le righe che esistono
   solo "lato sinistro" e che non esistono affatto "lato destro";
   ovviamente in questo caso le colonne che corrispondono a "lato 
destro"
   rimarrano tutte con valori NULL, visto che non esistono affatto.

venendo al tuo caso: pare evidente che su "layer shape A" ci sono
tantissime righe che dichiarano un codice ID_CATASTO che non esiste
affatto in "dbf B"
ed e' proprio da quelle che nascono tutti i NULL di cui ti lamenti

attenzione: a volte il codice c'e', ma magari e' mal formattato.
p.es. e' sporcato da spazi in testa o in coda, da una parte e'
in tutte maiuscole mentre dall'altra parte usa le maiuscole etc.
verifica bene se questo e' il tuo caso, non dovrebbe essere
troppo difficile.


> Avevo, nel frattempo, provato a salvare i risultati ottenuti con un 
> comando
> del genere
>
> Select *
> from A As F1
> Left Join B As F2 On (F1.ID_CATASTO = F2.A0_Id_Catasto);
>

prova piuttosto:

Select *
from A As F1
Join B As F2 On (F1.ID_CATASTO = F2.A0_Id_Catasto);


> mancano molte informazioni che prima c'erano!
> Molti campi sono diventati vuoti. Come mai?
>

verifica meglio; non puo' essere cosi', perche SQL non fa sparire le
informazioni (quando esistono).
piuttosto, se hai dei codici ID_CATASTO che per qualsiasi motivo non
riescono a trovare un match corrispondente, allora ti rimarrano
naturalmente dei valori NULL. ma non e' che "spariscono".
e' piuttosto che "non esistono proprio" ;-)

e se vuoi identificare meglio quali sono le righe che non vanno in 
match:

SLELECT *
FROM A AS f1
LEFT JOIN B AS f2 ON (fI.id_catasto = f2.a0_id_catasto)
WHERE f2.a0_id_catasto IS NULL;

ciao Sandro


Maggiori informazioni sulla lista Gfoss