Newsgroup: it.comp.lang.delphi
Titolo: Condizione per una query

Non riesco ad esprimenre questa condizione:
Voglio estrarre tutti i records dove il campo BANCA o il campo CONTRO di un 
dataset (contenente tutti i movimenti) sono uguali al campo BANCA di un 
secondo dataset (Piano dei conti), purchè il campo H in questo dataset sia 
NULL.
 
Ho provato come segue, ma estrae sbagliato. Praticamente non rileva la 
condizione PIANO.H IS NULL :
 
Select ...from MOV join PIANO B
   ON (MOV.'Contro' = PIANO.'banca' or MOV.'Banca' = PIANO.'banca') and 
PIANO.H IS NULL
 
Allora ho provato a cambiare la condizione e ad estrarre i records dove 
Piano.H = 'X', e questa funziona:
Select ...from MOV join PIANO B
   ON (MOV.'Contro' = PIANO.'banca' or MOV.'Banca' = PIANO.'banca') and 
PIANO.H='X'
 
Ma a me serve la prima. Ci ho lavorato almeno un paio di ore e non ne esco. 
Uso il BDE, ma la query concettualmente non dovrebbe essere troppo diversa. 
Qualcuno ci capisce ?
 
Aggiungo un esempio per spiegare meglio a chi avesse la voglia di aiutarmi.
 
Esempio PianoConti:
BANCA      H
  AAA
  BBB
  CCC         X
 
Esempio Movimenti:
BANCA   CONTRO
AAA           EEE      da estrarre perchè valore BANCA è presente su 
PianoConti
EEE           AAA      da estrarre perchè valore CONTRO è presente su 
PianoConti
YYY           GGG     non estrarre perchè nè BANCA nè CONTRO presenti su 
PianoConti
NNN          CCC     non estrarre perchè il campo H non è null 
 

 condizione PIANO.H IS NULL :
 
Ricordo che il BDE dava qualche problema con il NULL...
 
Prova a mettere nella tabella '' al posto di NULL, in modo che 
la condizione diventi (Piano.H = '') 
 
E comunque controlla che non sia gia' cosi'... se inserisci i
dati da codice allora sei sicuro che sia NULL ma se usi dei
componenti grafici (DBEdit, DBGrid...) in passato ricordo
che a volte questi inserivano autonomamente dei valori di '' 
nelle tabelle BDE.  
 
ciao
Giacomo

Prova a mettere nella tabella '' al posto di NULL, in modo che
la condizione diventi (Piano.H = '')
Giacomo
 
No, il problema non è is null (e comunque ho provato anche H='').
Praticamente la query estrae un conto dove nel dataset 'Piano' il campo H 
non è vuoto, mentre dovrebbe ignorarlo.
Ho provato a mettere Piano.H tra i campi della query (oltre che nelle 
condizioni) e risulta vuoto anche se nel dataset non lo è.
 
La condizione è espressa così:
ON (MOV.'Contro' = PIANO.'banca' or MOV.'Banca' = PIANO.'banca') and PIANO.H 
IS NULL
 
Se la semplifico così:
ON MOV.'Contro' = PIANO.'banca' and PIANO.H IS NULL
o così:
ON MOV.'Banca' = PIANO.'banca' and PIANO.H IS NULL
 
allora va bene, così come va sempre bene se invece di cercare i casi in cui 
H is null, cerco i casi opposti (H='X')
 
Ho provato tutte le combinazioni e l'unica che sbaglia è quella che mi 
serve... 
 


Prova con Trim(Piano.H='')
oppure UpperCase(Piano.H='')
oppure ancora
Piano.H='' or Piano.H=' ';
Voltolini Luigi
 
 
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
 
 

 
Prova con Trim(Piano.H='')
oppure UpperCase(Piano.H='')
oppure ancora
Piano.H='' or Piano.H=' ';
Voltolini Luigi
---
Provate tutte, ma niente ..  Ho trovato alcune idiosincrasie nella sintassi: 
per esempio ho verificato che se semplicemente sostituisco 'is null' con una 
delle espressioni che mi hai suggerito non viene estratto niente, ma 
modificando la condizione da
ON (M.'banca' = Piano.'banca' or M.'Contro' = Piano.'banca') and Piano.H = 
''
in
ON (M.'banca' = Piano.'banca' or M.'Contro' = Piano.'banca') where Piano.H = 
''
 
allora la estrazione viene eseguita, anche se continua ad estrarre records 
dove Piano.H non è vuoto 
 

On Saturday, 5 November 2016 15:28:21 UTC, Stark  wrote:
 
[...]
Devi usare una LEFT join.

Devi usare una LEFT join.
---
Provato. Ma continua ad estrarre erroneamente i records dove 
M.Banca=P.Banca. Praticamente applica la condizione P.H is null solo quando 
M.Contro=P.Banca. Potrebbe essere un problema del local Sql ?
 
Select * from M left join P ON (M.'banca' = P.'banca' or M.'Contro' = 
P.'banca') and P.H is null