根据多个字段查询
问题描述:
不知道如何标题,但这里是我的场景根据多个字段查询
在WebMatrix上工作,内置于sqlCE数据库。
有多个位字段(3场)的表
我需要的是搜索所有的记录,但跳过那些这三个位字段中的任何一个是假
我的查询看起来像这样
Select * From Tr where Tr.ClID=28 and (VApproved<>'False' or PApproved<>'False' or CApproved<>'False')
现在,如果我搜索CLID = 28我得到7条,并与上面的查询也得到7条记录。 Se基本上是哪里条件不起作用的第二部分。
感谢您的帮助和帮助。
感谢,
加成 数据看起来这
ClID VApproved PApproved CApproved
**** ********* ********* *********
28 True True True
28 True True True
28 NULL True True
28 NULL True True
28 NULL True True
28 NULL True True
28 NULL False True
答
如果您需要False
值跳过任何,那么你这只是你的条件是不正确的,它应该是:
Select * From Tr where Tr.ClID=28 and VApproved<>'False' and PApproved<>'False' and CApproved<>'False'
即所有的人都不能是假的,所以我们使用AND
不是OR
。并考虑您的NULL的要求就应该是这样的:
Select * From Tr where Tr.ClID=28 and (VApproved=1 OR VApproved IS NULL) and (PApproved=1 OR PApproved IS NULL) and (CApproved=1 OR PApproved IS NULL)
答
我想你可能具备的条件是错误的。这:
and (VApproved<>'False' or PApproved<>'False' or CApproved<>'False')
说让行,其中字段的任何(或全部)是不假,这意味着一些(或全部)真正的行会匹配。你可能希望这样的:
(coalesce(VApproved,1) & coalesce(PApproved,1) & coalesce(CApproved,1)) = 1
使用bitwise logical and
&
连同COALESCE()确保只有当所有列是真实的或空行返回。这将返回示例数据中的所有行,但PApproved为False的行除外。
如果你只是想所有的真值(治疗无效为假)行则:
where (VApproved & PApproved & CApproved) = 1
将做到这一点。这将返回样本中的前两行。
这将跳过所有我不想忽略的NULL值,我的意思是,我们知道有7条记录,并且只有其中2个具有所有位字段为True。这将返回上述查询,它将跳过所有其他字段。 – cjv 2014-09-29 08:00:37
@cjv是否希望将'NULL'视为'False'或'True'? – 2014-09-29 08:06:16
逻辑上认为是正确的。 – cjv 2014-09-29 08:08:22