Ho creato alcune query e non riesco a capire perché i risultati non sono quelli che mi aspettavo.Utilizzo di predicati NON in SQL
Non capisco perché Query II e III non restituiscano gli stessi risultati. Mi aspetto che la query II restituisca tutte le righe non selezionate dalla query I.
Mi sarei aspettato che Query II e III dessero gli stessi risultati. Secondo me i risultati di III sono quelli giusti.
Sono sicuro che mi manca qualcosa, semplicemente non so cosa.
L'esempio:
Tabella:
CREATE TABLE [dbo].[TestTable](
[TestTableId] [int] NOT NULL,
[ValueA] [int] NULL,
[ValueB] [int] NULL
) ON [PRIMARY]
dati:
TestTableId ValueA ValueB
1 10 5
2 20 5
3 10 NULL
4 20 NULL
5 NULL 10
6 10 10
7 NULL NULL
Query:
Tutti i record: select * from TabellaProva
I. Una query di selezione:
select * from TestTable
where (ValueA = 10 or ValueA = 20) AND ValueB = 5
Risultato:
TestTableId ValueA ValueB
1 10 5
2 20 5
II. La stessa query, ma come non
select * from TestTable
where NOT ((ValueA = 10 or ValueA = 20) AND ValueB = 5)
Risultato:
TestTableId ValueA ValueB
5 NULL 10
6 10 NULL
III. La stessa query come il secondo (penserei)
select * from TestTable where TestTable.TestTableId not in
(select TestTableId from TestTable
where (ValueA = 10 or ValueA = 20) AND ValueB = 5)
Risultato:
TestTableId ValueA ValueB
3 10 NULL
4 20 NULL
5 NULL 10
6 10 10
7 NULL NULL
'NULL = 5' restituisce" UNKNOWN "(anziché" no "). – onedaywhen
Ero un po 'metaforico. Il punto è che una riga in cui ValueB è NULL verrà esclusa da entrambi. – BradC
@onedaywhen - Modificato il mio post in modo leggermente più preciso in base al tuo commento. – BradC