Autore Topic: Eseguire query se campo Null  (Letto 597 volte)

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Eseguire query se campo Null
« il: 09 Gennaio 2014, 23:38:17 CET »
0
Ciao, sono diverse ore che stò cercando di visualizzare i dati prelevati da 2 tabelle in una ListView.
In pratica
Codice (Java): [Seleziona]
SELECT SUM(g.field1), SUM(g.field2), c._id, c.field_1, c.field_3

FROM Tabella1 g JOIN Tabella2 c WHERE(c.field_1 = g.field5)";

funziona in parte, cioè restituisce "null" se
Codice (Java): [Seleziona]
c.field_1 non è presente in
Codice (Java): [Seleziona]
g.field5
A questo punto se si verifica questa cosa vorrei comunque prelevare i dati dalla Tabella2
Codice (Java): [Seleziona]
SELECT c._id, c.field_1, c.field_3 FROM Tabella2 c


Offline mirkus87

  • Utente junior
  • **
  • Post: 56
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Play Store ID:
    Mirko Vitiello
  • Sistema operativo:
    Windows 7
Re:Eseguire query se campo Null
« Risposta #1 il: 10 Gennaio 2014, 12:54:04 CET »
0
Ciao
Magari ho capito male la richiesta però potresti partire dalla tabella 2 c e relazionare in LEFT con la tabella 1 g mettendo la relazione g.field5 = c.field1 nell' ON e non nel WHERE

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Re:Eseguire query se campo Null
« Risposta #2 il: 10 Gennaio 2014, 15:40:50 CET »
0
Ho fatto così, ma ricevo ugualmente null se
Codice (Java): [Seleziona]
c.field_1non è presente in
Codice (Java): [Seleziona]
g.field5
Codice (Java): [Seleziona]
SELECT c._id, c.field_1, c.field_3, SUM(g.field1), SUM(g.field2)
FROM Tabella2 c LEFT JOIN Tabella1 g ON (c.field_1 IS NULL OR g.field5 IS NULL OR c.field_1 = g.field5)";

Offline mirkus87

  • Utente junior
  • **
  • Post: 56
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Play Store ID:
    Mirko Vitiello
  • Sistema operativo:
    Windows 7
Re:Eseguire query se campo Null
« Risposta #3 il: 10 Gennaio 2014, 19:26:36 CET »
0
Io avrei scritto cosi'
Codice: [Seleziona]
SELECT c._id, c.field_1, c.field_3, SUM(g.field1), SUM(g.field2)
FROM Tabella2 c LEFT JOIN Tabella1 g ON (c.field_1 = g.field5);
Quindi ti verranno reperiti tutti i record presenti nella tabella2 c ed eventualmente verra' effettuata la somma dei campi della tabella1 g.
I record presenti nella tabella1 g che non trovano corrispondenza nella tabella2 c ovviamente non verranno estratti, ma da quel che ho capito a te servono i record della tabella2 c

Faccio un esempio pratico
tabella c -> AnagraficaArticoli, composta dai campi id,descrizione
tabella g -> ArticoliVenduti, composta dai campi id,idArticolo,ImportoVendita

Il contenuto delle tabella AnagraficaArticoli:
Id descrizione       
--  ---------- 
1   Mela         
2   Pera         
3   Banana         

Il contenuto delle tabella ArticoliVenduti:
id  idArticolo ImportoVendita       
--  ----------   ----------------------
1   1                100
2   1                200
3   2                500

Con la query sopra esposta quindi sarebbe
Codice: [Seleziona]
SELECT c._id, c.Descrizione,SUM(g.importoVendita) 'somma'
FROM AnagraficaArticoli c LEFT JOIN ArticoliVendutig ON (c.id= g.idArticolo)
GROUP BY  c._id, c.Descrizione

con il seguente risultato

c._id  c.Descrizione  somma
------   ---------------  ----------
1         Mela               300
2         Pera               500
3         Banana           null

Spero di esser stato chiaro e di aver capito correttamente la tua richiesta  ;-)



Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Re:Eseguire query se campo Null
« Risposta #4 il: 10 Gennaio 2014, 23:21:48 CET »
0
Non capisco perchè, ma anche così se
Codice (Java): [Seleziona]
c.field_1non è presente in
Codice (Java): [Seleziona]
g.field5mi restituisce "null". Inoltre se è presente, la query restituisce 1 solo
Codice (Java): [Seleziona]
c.field_1 e non tutti quelli presenti nelle 2 tabelle.....spero tu abbia capito bene e ti ringrazio per il tempo che dedichi al mio problema... ;-)
« Ultima modifica: 10 Gennaio 2014, 23:24:04 CET da JCC »

Offline mirkus87

  • Utente junior
  • **
  • Post: 56
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Play Store ID:
    Mirko Vitiello
  • Sistema operativo:
    Windows 7
Re:Eseguire query se campo Null
« Risposta #5 il: 11 Gennaio 2014, 01:36:05 CET »
+1
Tranquillo, oggi aiuto io, domani aiuti tu :)

Guarda in teoria la situazione da te descritta non si dovrebbe verificare.
Se la tabella 2 c  contiene record con il campo field_1 diverso da NULL non credo sia possibile che la qry restituisca NULL a meno di errori di sintassi nel sorgente

Se definisci la query solo con la tabella2 il campo interessato ritorna lo stesso null?
Codice: [Seleziona]
SELECT c._id, c.field_1, c.field_3
FROM Tabella2 c

Inoltre se è presente, la query restituisce 1 solo
Codice (Java): [Seleziona]
c.field_1 e non tutti quelli presenti nelle 2 tabelle.....spero tu abbia capito bene e ti ringrazio per il tempo che dedichi al mio problema... ;-)
Questo si potrebbe verificare se non hai inserito la clausola GROUP BY (nel codice postato in precedenza non c'era GROUP BY e anche io non l'avevo inserito).
In linea di massima (o quanto meno, io ho imparato dal T-SQL) non dovrebbero coesistere campi con clausola di aggregazione e campi senza clausola di aggregazione. La query andrebbe in errore.
Con SQLite la query non va in errore, ma non da il risultato sperato o comunque estrae solo il primo record ( ho fatto una verifica ed apparentemente fa cosi)
Quindi prova ad aggiungere
Codice: [Seleziona]
group by c._id, c.field_1, c.field_3

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Re:Eseguire query se campo Null
« Risposta #6 il: 11 Gennaio 2014, 01:56:52 CET »
0
Bene, ho inserito GROUP BY ed ora è tutto ok
Grazie