Frage

Ich habe eine Frage, die nicht wie erwartet funktioniert

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 gibt nichts zurück, obwohl ich weiß, dass diese IDs nicht in table_x q2 ordnungsgemäß sind, ohne nicht in

Was könnte mit meiner Frage falsch sein?

War es hilfreich?

Lösung

Sie haben einen Nullwert in der Tabelle

Versuche dies

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()

oder dieses

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()

Siehe auch Wählen Sie alle Zeilen aus einer Tabelle aus, die in einer anderen Tabelle nicht vorhanden ist

Andere Tipps

Was ist mit einem linken 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()

Es gibt eine andere Situation: Die Unterabfrage kann nichts zurückgeben. SQL Server funktioniert nicht wie erwartet, wenn die Nicht -in -Klausel eine NULL -Liste zurückgibt. Ich habe eine Frage wie Folgendes:

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

Wenn die Unterabfrage eine Liste von IDs enthält, gibt die Abfrage die Daten wie erwartet zurück. Aber wenn die Unterabfrage nichts zurückgibt, wird die Abfrage weiterhin Daten zurückgeben, aber dann steckt.

Ich habe die Abfrage in Folgendes geändert und das Problem gelöst:

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

Dies stellt sicher, dass die Unterabfrage mindestens eine Zahl enthält.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top