Domanda

Ho una domanda che non sta funzionando come previsto

Q1:
SELECT id, name 
FROM vw_x 
WHERE id NOT IN (select pid from table_x)
GROUP BY id, name
Having max(c_date) > GETDATE()

Q2:
SELECT id, name 
FROM vw_x 
GROUP BY id, name
Having max(c_date) > GETDATE()

Q1 non restituisce nulla anche se so questi ID non sono in table_x corre Q2 correttamente senza NON IN

Cosa c'è di sbagliato con la mia domanda?

È stato utile?

Soluzione

si dispone di un valore NULL nella tabella

Prova questo

SELECT id, name 
FROM vw_x 
WHERE id NOT IN (select pid from table_x where pid is not null)
GROUP BY id, name
Having max(c_date) > GETDATE()

o del presente

SELECT id, name 
FROM vw_x 
WHERE  NOT EXISTS (select 1 from table_x  where pid = vw_x.id  )
GROUP BY id, name
Having max(c_date) > GETDATE()

Si veda anche Seleziona tutte le righe da una tabella che non esistono in un'altra tabella

Altri suggerimenti

Cosa succede ad usare un LEFT JOIN?

SELECT id, name 
FROM vw_x 
LEFT JOIN table_x on id = pid
WHERE pid IS NULL
GROUP BY id, name
Having max(c_date) > GETDATE()

C'è un'altra situazione: la subquery può restituire nulla. SQL Server non funziona come previsto se la clausola NOT IN restituisce una lista nulla. Ho una domanda simile alla seguente:

select * from table where id not in (select id from tableB where somecondition(x))

Quando la sottoquery contiene un elenco di ID, la query restituirà i dati come previsto. Ma quando la subquery restituisce nulla, la query restituirà ancora i dati, ma poi si blocca.

ho cambiato la query al seguente e ha risolto il problema:

select * from table where id not in (select id from tableB where somecondition(x) **union all select 0**)

che si assicura la subquery conterrà almeno un numero.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top