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

Antonio Falciano afalciano a yahoo.it
Ven 28 Mar 2014 20:31:51 CET


Il 28/03/2014 19:51, NicoPez ha scritto:
> Ciao Sandro, grazie della risposta. :)
>
> Il Left Join Ú proprio mirato. Ho bisogno di non perdere nessuna delle righe
> del layer shape A anche se queste non ci sono in dbf B. Ovviamente quando
> farò questo join avrò delle righe nulle dove non c'Ú lo stesso IdCatasto in
> entrambi. Questo era preventivato.
>
> Però facendo il join (che mi va quindi ad includere tutte le tabelle del dbf
> B) potrei avere che alcune colonne rimangano completamente nulle. Questo
> perché in tutte le righe del layer A potrebbero non avere le informazioni in
> una certa colonna del dbf di B. Forse Ú meglio fare un esempio :)
>
> /Layer Shape A/
> AField1   AField2      IDCatasto         Geometry
> 1	    326	    100326	    BLOB sz=308 GEOMETRY
> 1	     80	    10080	    BLOB sz=148 GEOMETRY
> 1	    327	    100327	    BLOB sz=468 GEOMETRY
> 1	    328	    100328	    BLOB sz=148 GEOMETRY
>
> /Dbf B/
> IDCatasto      Field1          Field2            Field3
> 100326	    NULL            5                  7
> 10080	    NULL	      15                NULL
> 100327          NULL            35                55
> 100380	    2580            2                 NULL
>
> Facendo il LEFT JOIN avrò
> AField1   AField2      IDCatasto         Geometry                   BField1
> BField2  BField3
> 1	    326	    100326	    BLOB sz=308 GEOMETRY      NULL     5         7
> 1	     80	    10080	    BLOB sz=148 GEOMETRY      NULL     15       NULL
> 1	    327	    100327	    BLOB sz=468 GEOMETRY      NULL     35       55
> 1	    328	    100328	    BLOB sz=148 GEOMETRY      NULL     NULL    NULL
>
> Questo Ú il risultato che voglio, ma escludendo la colonna BField1 visto che
> ha tutti campi nulli.
> Ora, qui Ú semplice. Ma se ho 500 colonne e ne devo eliminare 123, per
> esempio, non Ú che posso andarmene a spulciare una per una. C'Ú un qualche
> modo per farlo?

Dopo aver fatto il LEFT JOIN, se intendi eliminare la colonna BField1,
visto che nella stragrande maggioranza dei record presenta valori NULL,
potresti seguire l'esempio contenuto qui:
http://sqlite.org/faq.html#q11
In alternativa, quando effettui il join, ti puoi escludere a priori il
campo indesiderato, selezionando solo i campi utili dal dbf. Ad esempio,
ti crei prima una vista sul dbf:

CREATE VIEW C
AS
     SELECT IDCatasto, Field2, Field3 -- NB: non seleziono Field1
     FROM B;

e poi esegui il LEFT JOIN usando la vista C:

SELECT *
FROM A As F1
LEFT JOIN C AS F2
ON (F1.ID_CATASTO = F2.A0_Id_Catasto);

ciao
Antonio

-- 
Antonio Falciano
http://www.linkedin.com/in/antoniofalciano


Maggiori informazioni sulla lista Gfoss