[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