2016-08-25 21 views
1

SQL Serverで作業していますが、私の述語でAGAINSTにフィルタリングされた行が返されているようです。私は質問を絞り込み、小さなものに絞り込んだが、悪いデータを返す。私は明示的により大きい5000T-SQL:Where句が無視されるように見えます

私が欠けているものを上の任意の助けを借りていただければ幸いだけのものについてフィルタリングするとき

DECLARE @ConnectMagicNumber BIGINT; 
SET @ConnectMagicNumber = 4294967296; 

SELECT DISTINCT 
FLOOR(pe.ID_PE/@ConnectMagicNumber) as 'PE-StaNo', 
pe.FName, pe.VName 
FROM [dbo].[CRM_CPPE] pe 
WHERE 
-- Predicate below is not being applied 
(FLOOR(pe.ID_PE/@ConnectMagicNumber)) > 5000 
-- 
AND pe.FName = 'Augendoppler' OR (pe.FName = 'Batinic' AND pe.VName ='Drasco') 

なぜ地球上の

が戻ってくる1のPE-StaNoとその行であります。私はコアに揺れて、私は正しくフィルタリングを実行できません。

Bad SQL Query

+4

ある、ので。最後の 'と'の後に '()'を使います.WHERE (FLOOR(pe.ID_PE/@ConnectMagicNumber))> 5000 AND(pe.FName = 'Augendoppler' OR(pe.FName = 'Batinic' AND pe。 VName = 'Drasco')) ' –

答えて

7

ここに括弧がありません。操作の順序を覚えておく必要があります。

WHERE 
-- Predicate below is not being applied 
(FLOOR(pe.ID_PE/@ConnectMagicNumber)) > 5000 
-- 
AND (pe.FName = 'Augendoppler' OR (pe.FName = 'Batinic' AND pe.VName ='Drasco')) 
+0

恥ずかしい。私はこの質問を残して、他の人を助けるかもしれないようにこのデメリットを着用し続けます。 –

2

これは間違っている部分です。

AND pe.FName = 'Augendoppler' OR (pe.FName = 'Batinic' AND pe.VName ='Drasco') 

Batinicは、それがその行を返すされます。FNameであるため。

0

本質的には、明示的な括弧なしであなたのクエリは、それが原因で `or`条件である

... 
FROM [dbo].[CRM_CPPE] pe 
WHERE 
((FLOOR(pe.ID_PE/@ConnectMagicNumber)) > 5000 AND pe.FName = 'Augendoppler') 
OR (pe.FName = 'Batinic' AND pe.VName ='Drasco') 
関連する問題