Query SQL

wedge
spero esista qualche esperto di databases in giro :-D

sono, principiantissimo, abbiate pietà :)

ho due databases fatti così

database SpecObj: facciamo finta abbia una colonna che ci interessa, SpecObjID
database SpecLine: facciamo finta abbia tre colonne che ci interessano, SpecObjID, lineID, nSigma

SELECT TOP 100000
S.SpecObjID
L1.nSigma

FROM SpecObj as S
JOIN SpecLine as L1 ON S.SpecObjID = L1.SpecObjID

WHERE
(selezioni varie su S)
L1.lineID = 4


questa parte dovrebbe significare prendi la riga di SpecLine ove lineID è 4
se il suo SpecObjID coincide con uno SpecObjID di SpecObj
stampami SpecObj e nSigma della linea 4

bene, ora, se non mi viene trovata nessuna linea con lineID = 4, nell'output non ottengo nessuna riga relativa agli oggetti di SpecObj che rispondono alle (selezioni varie su S)

come posso fare invece per avere tutti gli oggetti del primo database che hanno la proprietà (selezioni varie su S), e poi avere una colonna di nSigma corrispondenti qualora esista la linea 4 nel database L1 con un Id uguale a quello di S? e invece avere magari valore 0 se questa non esiste?

spero di essermi spiegato in maniera comprensibile :)

Risposte
kanon4
Prova a verificare che effettivamente nelle due tabelle ci siano i dati corrispondenti, cioè che nella tabella SpecObj esista un record con SpecObjID=4 e che esista nella tabella SpecLine.

Comunque la sintassi della query mi sembra corretta, ma che tipo di database stai utilizzando? (Oracle, Access, SqlSever,..)

Rggb1
"wedge":

come posso fare invece per avere tutti gli oggetti del primo database che hanno la proprietà (selezioni varie su S), e poi avere una colonna di nSigma corrispondenti qualora esista la linea 4 nel database L1 con un Id uguale a quello di S? e invece avere magari valore 0 se questa non esiste?

spero di essermi spiegato in maniera comprensibile :)


Insomma... ;)

Vediamo se ho capito: se "lineID=4" ti interessa il valore del campo "nSigma"; se invece "lineID != 4" non ti interessa (o non vuoi) tale valore, e quindi metti zero. Puoi semplicemente allora fare una intersezione di due select successive.

doremifa1
al posto di JOIN scrivi LEFT OUTER JOIN

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.