[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