Newsgroup: it.comp.lang.visual-basic
Titolo: Query SQL e valori nulli

Devo effettuare la seguente query:
                                       -------------------------------------
--------------------
SELECT
contratti.id
,agenti.nome,banche.banca,fornitori.fornitore,ncont,telaio,impo,
iva,data_ini,socid,targa,spread
FROM contratti,fornitori,agenti,banche
WHERE 
contratti.id
 = " & IdCont                ~ (idcont è una variab. long
che mi contiene l'ID del contratto)
                AND 
fornitori.id
=contratti.forid
                AND 
agenti.id
=contratti.agentid
                AND 
banche.id
=contratti.bancaid
                                       -------------------------------------
--------------------
In pratica è come se effettuassi un join tra queste tabelle.
Fin qui tutto OK, ma se uno dei campi in cui imposto le condizioni WHERE,
esattamente
    contratti.forid
    contratti.agentid
    contratti.bancaid
fosse vuoto, ecco là che non mi estrae un bel niente ed il recordset risulta
vuoto...
C'è un modo per ovviare a questo problema?
Saluti
Marco
--
____________________________
   G 1 0 X®
Web: 
www.giox.net
Alt. Mail: 
info...@libero.it
Icq Uin: 47698601
Irc Chan. @azzurranet:
   #mhackerone; #ahccc; #linux;
   #hackers-it; #programmatori
_____________________________

 C'è un modo per ovviare a questo problema?
Usare l'Outer Join.
Ho scoperto ieri che in Access è supportato solo il Left o il Right Outer
Join, per cui devi semplicemente riscrivere la tua query usando tale
sintassi anzichè il join 'vecchio stile' come hai fatto sopra.
Se usi MSDE o Sql-Server, puoi anche vedere se il Full Outer fa al caso tuo
(non mi sembra, in questo caso specifico).
Ciao
Alberto

> C'è un modo per ovviare a questo problema?
... così al volo direi che devi lavorare di left join e compagnia...
Ciao
Andrea

... proseguo da prima...
tipo
SELECT
contratti.id
,agenti.nome,banche.banca,fornitori.fornitore,ncont,telaio,impo,
iva,data_ini,socid,targa,spread
FROM contratti left join fornitori on contratti.forid=
fornitori.id
 left join contratti.agentid =agenti 
agenti.id
left join contratti.bancaid=banche 
banche.id
WHERE 
contratti.id
 = " & IdCont
Ciao
Andrea

non l'ho provato ma dovrebbe funzionare utilizzando >= al posto del segno di
uguale nelle condizioni WHERE
"G 1 0 X®" <giox *AT* 
libero.it
 "metti la @"> ha scritto nel messaggio
news:mLm4a.130310$ZE.37...@twister2.libero.it...


 C'è un modo per ovviare a questo problema?
    Un modo macchinoso, direi... Ti faccio un esempio basato sui dati di
Northwind:
        SELECT
            [TC].[NomeSocietà] AS NomeSocietà
          , [TO].[IDOrdine]    AS IDOrdine
        FROM
            Clienti AS [TC]
          , (
              SELECT
                  [T].[IDCliente] AS IDCliente
                , [T].[IDOrdine]  AS IDOrdine
              FROM
                  Ordini AS [T]
              UNION SELECT
                  NULL
                , NULL
              FROM
                  Ordini
            ) AS [TO]
        WHERE
            (([TC].[IDCliente]=[TO].[IDCliente]) AND ([TO].[IDOrdine] Is
Not Null))
            OR
            ([TO].[IDOrdine] Is Null)
        ORDER BY
            [TC].[NomeSocietà]
          , [TO].[IDOrdine]
        ;
-- 
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------