2017-07-10 1 views
2

私は訓練されたSQLの人ではありませんが、通常は基本的なクエリを書くことができます。しかし、これは私を混乱させてしまった。私はfldSrcAddressまたはfldDstAddressを持っていないレコードのfldUIDを取得しようとしているNULLを使用するとANDとORと混乱する

fldUID (auto-increment unique) 
fldSrcAddress 
fldDstAddress 
fldSrcDNSHost 
fldDstDNSHost 

、AND fldSrcDNSHostのいずれかがNULLであるかfldDstDNSHostがNULLである:

テーブルのサブセットです。

SELECT top 1 fldUID, fldSrcAddress, fldDstAddress 
From tbl_ExtLog_FirewallTraffic 
Where fldSrcAddress Is Not Null or fldDstAddress is not null 
And (fldSrcDNSHost Is Null Or fldDstDNSHost is null) 
order by fldUpdateTimeStamp asc 

しかし、クエリがあるfldUID 32831、返します:

私のクエリがある

Example Data: 
fldUID = 32831 
fldSrcAddress = 192.168.1.100 
fldDstAddress = 192.168.2.69 
fldSrcDNSHost = Asus 
fldDstDNSHost = Lucifer 

フィールド2と3の両方が(だから、理にかなっている)のデータを持っています。しかし、フィールド4とフィールド5にもデータがありますが、フィールド4またはフィールド5がNULLのレコードを検索しようとしています。

明らかに愚かな間違い - どんな助けもありがたいです。

おかげ

イアン

答えて

2

それは括弧の問題になることができます。

これを試してみてください:

作品
SELECT top 1 fldUID, fldSrcAddress, fldDstAddress 
From tbl_ExtLog_FirewallTraffic 
Where (fldSrcAddress Is Not Null OR fldDstAddress is not null) 
And (fldSrcDNSHost Is Null Or fldDstDNSHost is null) 
order by fldUpdateTimeStamp asc 
+0

- 今、私は愚かな感じ。私はANDの前とラインの最後に余分な括弧を入れてみましたが、最初の2つの条件の周りに置くとは思わなかった。今私はそれを見て意味をなさない!ありがとうございました。 – EyePeaSea

+0

目の3番目のセットが時々助けてくれる:)今、そのレコードを取得していた括弧を使わない理由を特定しようとする。 –

+1

:-)角かっこなしでは、最初の文(fldSrcAddress Is Not Null)を処理しません。fldSrcAddressがnullでない最初の行を返します。 ?質問してくれてありがとう - それは私が間違っていることを理解するのに役立ちます:-) – EyePeaSea

関連する問題