Abfrage liefert Datensätze obwohl WHERE zu falsch evaluieren sollte

31/01/2008 - 12:58 von Thomas Schremser | Report spam
Hallo allerseits!

Ich habe in einer SQL Server 2000 Datenbank folgende Abfrage ausgeführt:

DECLARE @SlipDate smalldatetime,
@SphereID int

SELECT @SlipDate = '2008-01-01',
@SphereID = 1

SELECT *
FROM (
SELECT PersonID,
SUM(-1 * Amount) AS Total
FROM Bookings
WHERE Contribution BETWEEN 200 AND 299
AND BookingCode LIKE 'V%'
AND SlipDate = @SlipDate
GROUP BY PersonID
) B
LEFT OUTER JOIN (
SELECT PersonID,
-1 * SUM(Amount) Total
FROM Bookings
WHERE Contribution BETWEEN 200 AND 299
AND BookingCode LIKE 'V%'
AND SlipDate DATEADD(Month, -1, @SlipDate)
GROUP BY PersonID
) V ON V.PersonID = B.PersonID
INNER JOIN SphereMasterData S ON S.PersonID = B.PersonID
AND S.SphereID = @SphereID
INNER JOIN PersonMasterData P ON P.PersonID = B.PersonID
WHERE @SphereID = 2
AND
(
S.ExitDate > @SlipDate
OR S.ExitDate IS NULL
)
AND
(
V.PersonID IS NULL
OR B.Total != V.Total
)

Weil ja @SphereID = 1 ist, dürfte wegen der WHERE-Klausel ja kein Datensatz
zurückgegeben werden. Tatsàchlich erhalte ich aber jede Menge Datensàtze als
Ergebnis.

Wenn ich nun die Zeile

INNER JOIN PersonMasterData P ON P.PersonID = B.PersonID

auskommentiere, dann erhalte ich - wie erwartet - keine Datensàtze mehr. Hat
jemand eine Erklàrung für dieses Verhalten?

TIA

Grüße
Thomas

Any problem in computer science can be solved with another layer
of indirection. But that usually will create another problem.
David Wheeler
 

Lesen sie die antworten

#1 Christoph Muthmann
31/01/2008 - 14:35 | Warnen spam
Thomas Schremser wrote:
Hallo allerseits!

Ich habe in einer SQL Server 2000 Datenbank folgende Abfrage
ausgeführt:

[snip]

Weil ja @SphereID = 1 ist, dürfte wegen der WHERE-Klausel ja kein
Datensatz zurückgegeben werden. Tatsàchlich erhalte ich aber jede
Menge Datensàtze als Ergebnis.

Wenn ich nun die Zeile

INNER JOIN PersonMasterData P ON P.PersonID = B.PersonID

auskommentiere, dann erhalte ich - wie erwartet - keine Datensàtze
mehr. Hat jemand eine Erklàrung für dieses Verhalten?



Hallo Thomas,
da scheint beim Parsen wohl was schief zu gehen. Welches ServicePack
hast Du denn drauf?


Einen schönen Tag noch,
Christoph
(Please post ALL replies to the newsgroup only unless indicated
otherwise)

Ähnliche fragen