SQL Server:非严格的WHERE查询
问题描述:
我想对返回列值的表执行Select
查询,如果至少所有必需的“X”选项都经过验证,即使最后还有更多选项。SQL Server:非严格的WHERE查询
NAME | A | B | C | D | E |
------------------------------------
BOB X X X
TOM X X X
WILL X X X
例如:BOB需要至少有选项B,C和D才有效。如果至少B,C和D是真的,无论E或A的值是什么(甚至是True),我都希望查询返回BOB。 B = true,C = true,D = true和A = true的查询也应返回BOB。
所以像
Select
Name
From
Table
Where
A = True and B = True and C = True and D = True
查询返回BOB(因为B,C和d是真实的),以及TOM(因为A,B和C是真实的),但没有意志,因为它需要E =真正。
你有什么想法吗?
感谢
答
所以,基本上你需要评估三个不同的条件,如果它的任何一个为真时选择的名称。
下面是该查询,从被提供了什么(变化表名和在where子句中的“真”)
Select
Name
From
Table
Where
(B = True and C = True and D = True)
or (A = True and B = True and C = True)
or (C = True and D = True and E = True)
答
感谢您的意见! 是的Damien我认为关系部门可能会有所帮助。 也许我可以改变一个位以2个表中的结构:
1表,列出为有效需要为每个用户的选项: t_name
Name | Opt1 | opt2 | opt3 | opt4|
================================
BOB | B | C | D | |
---------------------------------
TOM | A | B | C | |
---------------------------------
WILL | C | D | E | |
---------------------------------
一个表可以由真或假来更新这取决于如果选项是为发送或者paramtre不,如果选项被送到它的价值是真实的(所以这个表必须由每个请求更新列出可用的选项)
t_option
Option | Status|
================
A | True |
----------------
B | True |
----------------
C | True |
----------------
D | True |
----------------
E | false|
----------------
所以查询可这样的事情:
SELECT name FROM t_name
WHERE opt1 IN (SELECT option FROM t_option WHERE status=True)
AND opt2 IN (SELECT option FROM t_option WHERE status=True)
AND opt3 IN (SELECT option FROM t_option WHERE status=True)
AND opt4 IN (SELECT option FROM t_option WHERE status=True)
,但我必须要肯定选择不为空(在本例中OPT4为null)
看看表。看看你的逻辑。他们不匹配。 – 2014-10-01 02:46:06
试试这个where子句。 '在哪里(A =真或B =真或C =真或D =真)而不是E =真' – Sathish 2014-10-01 04:45:27
你想只检查前3列值?像A,B,C或B,C,D或C,D,E。 – Mukund 2014-10-01 04:48:35