所以我的查询就是这个
SELECT pm,SiteNumber,Client,OnHold,Urgent,SARequired,MissingInformation FROM Sites WHERE OnHold<>'' or Urgent<>'' or MissingInformation<>'' or SARequired<>'' and PM='K' and PM is not null and (ProjectStatus<>'Complete' or ProjectStatus<>'Archived') Order By SiteNumber asc
其中PM不是空的 - 我也尝试在vb.net中将值设置为
PM<>dbnull.value
'also tried
PM<> is null
'or just
PM<> Null
他们似乎都没有遗漏空值
也让我感到困惑的是,我要求只看PM PM ='K',如上面的查询,但我看到'R'
以下是我要回来的事情
pm
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
R
NULL
NULL
NULL
是的,我故意测试PM列的'K',因为我知道我没有任何
我确定它的东西很简单,只是不能把手指放在它上面
感谢任何帮助
答案 0 :(得分:3)
只需使用IS NOT NULL
即可。但是查询中的问题是OR
s。
格式化:
SELECT columns
FROM sites
WHERE onhold <> ''
OR urgent <> ''
OR missinginformation <> ''
OR sarequired <> ''
AND pm = 'K'
AND pm IS NOT NULL
AND ( projectstatus <> 'Complete'
OR projectstatus <> 'Archived' )
ORDER BY sitenumber ASC
如果您想在任何情况下排除NULLS
,请将其余条件括在括号中:
SELECT columns
FROM sites
WHERE pm IS NOT NULL
AND ( onhold <> ''
OR urgent <> ''
OR missinginformation <> ''
OR sarequired <> ''
AND pm = 'K'
AND ( projectstatus <> 'Complete'
OR projectstatus <> 'Archived' ) )
ORDER BY sitenumber ASC
编辑:当我告诉它寻找K而不是R 时,我们如何修复R而不是K?
我一定忽略了这个问题。如果您只想拥有pm = 'K'
的行,则根本不需要请求非空行,因为pm = 'K'
隐式地不是null:
WHERE pm = 'K'
AND ( onhold <> '' ...
答案 1 :(得分:3)
您需要围绕or
子句中初始where
条件的括号。
SELECT pm,SiteNumber,Client,OnHold,Urgent,SARequired,MissingInformation
FROM Sites
WHERE (OnHold<>'' or Urgent<>'' or MissingInformation<>'' or SARequired<>'') and
PM='K' and PM is not null and (ProjectStatus<>'Complete' or ProjectStatus<>'Archived')
Order By SiteNumber asc
在SQL中,AND
的优先级高于OR
。因此,原始语句解析为:
SELECT pm,SiteNumber,Client,OnHold,Urgent,SARequired,MissingInformation
FROM Sites
WHERE OnHold<>'' or Urgent<>'' or MissingInformation<>'' or
(SARequired<>'' and PM='K' and PM is not null and (ProjectStatus<>'Complete' or ProjectStatus<>'Archived'))
Order By SiteNumber asc