fa ho trascorso qualche tempo a cercare di capire il motivo per cui questa query non sta tirando i risultati che mi aspettavo:Perché il "non esiste" il lavoro query SQL e "non in" non
SELECT * FROM NGS WHERE ESPSSN NOT IN (SELECT SSN FROM CENSUS)
finalmente ho provato scrivere la query in un altro modo e questo finito per ottenere i risultati attesi:
SELECT * FROM NGS n WHERE NOT EXISTS (SELECT * FROM CENSUS WHERE SSN = n.ESPSSN)
la prima query sembra più appropriato e "corretta". Io uso "in" e "non in" tutto il tempo per selezioni simili e non ho mai avuto un problema che so di.
Buona chiamata! Ho appena controllato e c'è un valore nullo nella tabella. Riscrivendo la query su SELECT * FROM NGS WHERE ESPSSN NON IN (SELEZIONA ISNULL (SSN, '') FROM CENSUS) mi ha dato il valore atteso. Mi chiedo quale devo usare? – Josh
@Josh: I predefinito per 'non esiste' perché non risente del trucco' nullo'. Ma se hai problemi di prestazioni, può valere la pena esaminare il piano di query per entrambe le opzioni – Andomar
@Josh, @Andomar: L'ISNULL invaliderà l'uso di qualsiasi indice che potrebbe essere stato utilizzato prima di – gbn