SQLite Left Join

di il
5 risposte

SQLite Left Join

Utilizzando la seguente query, ottengo i dati da due tabelle. Ma se "B.col5", è vuota, ottengo solo un risultato da "table1".
Come posso ottenere tutti i dati in "table2", anche se non ci sono dati in "Table1"? grazie

String sql = "SELECT C._id, " +
            "B.col1, " +
            "B.col2, " +
            "B.col3, " +
            "B.col4, " +
            "B.col5, " +
            "B.col6, " +
            "SUM(C.col01), " +
            "C.col02, " +
            "C.col03 " +
            "FROM table1 B LEFT JOIN table2 C ON (B.col5 = C.col02)";

5 Risposte

  • Re: SQLite Left Join

    Ciao Evans,
    se vuoi ottenere sempre i risultati di entrambe le tabelle devi usare il "full join" che dovrebbe essere implementato anche in SQLite.
  • Re: SQLite Left Join

    No, purtroppo non è supportato.
    Considerando che non posso modificare le tabelle ed inserire una FOREIGN KEY (sarebbero problemi per chi fà il backup).
    Hai altre idee? grazie mille
  • Re: SQLite Left Join

    A questo punto perchè non simulare la full join in SQlite con un trucchetto?
    Ovviamente nelle select devi indicare le colonne corrette, io ho messo lo star per comodità.

    SELECT table1.*, table2.*
    FROM  table1  LEFT JOIN table2 ON table1.col5= table2.col02
    UNION ALL
    SELECT table1.*, table2.*
    FROM   table2 LEFT JOIN table1 ON table1.col5= table2.col02
    WHERE  table1.col5 IS NULL
  • Re: SQLite Left Join

    Stesso problema, cioè se in Table2 non ci sono dati, ottengo solo una riga di Table1
    (precisamente l'ultimo record della tabella)

    Quindi, modificando la query ho questo:
    
    String tabella_conti = "SELECT B._id, " +
    			  		"B.col1, " +
    			  		"B.col2, " +
    			  		"B.col3, " +
    			  		"B.col4, " +
    			  		"B.col5, " +
    			  		"B.col6, " +
    			  		"SUM(C.col7), " +
    			  		"C.col8, " +
    			  		"C.col9 " +
    			  		"FROM Table1 B LEFT JOIN Table2 C ON (B.col5 = C.col8) " +
    			  		"UNION ALL " +			  		
    			  		"SELECT B._id, " +
    			  		"B.col1, " +
    			  		"B.col2, " +
    			  		"B.col3, " +
    			  		"B.col4, " +
    			  		"B.col5, " +
    			  		"B.col6, " +
    			  		"SUM(C.col7), " +
    			  		"C.col8, " +
    			  		"C.col9 " +
    			  		"FROM Table2 C LEFT JOIN Table1 B ON (C.col8 = B.col5) WHERE C.col8 IS NULL ";
    
  • Re: SQLite Left Join

    Non è che devi usare una right invece di una left?

    oppure più semplicemente:
    String sql = "SELECT C._id, " +
    "B.col1, " +
    "B.col2, " +
    "B.col3, " +
    "B.col4, " +
    "B.col5, " +
    "B.col6, " +
    "SUM(C.col01), " +
    "C.col02, " +
    "C.col03 " +
    "FROM table1 B LEFT JOIN table2 C ON (B.col5 = C.col02 OR B.col5 is null)";

    ammesso che si possa con SQL lite.

    Ciao
Devi accedere o registrarti per scrivere nel forum
5 risposte