我有一个查询,我想要排除一组特定的组合。在这种情况下,我不希望记录中圆形ID和名称与我指定的值匹配。
不幸的是,我的查询排除了任何一个或另一个结果(尽管有括号)。我注意到,当两个变量都使用'!='时,我只会在括号内得到意想不到的结果(当一个或两个使用'='时,它会按预期尊重这两个条件。)
有人可以帮我调整查询,以便排除的唯一结果是那些符合这两个标准的结果吗?解释为什么我正在做的事情是错误的也将不胜感激。 (我不得不更改表名,但希望它仍然可读)
request.setAttribute("name", "value");
答案 0 :(得分:1)
在这种情况下,我不希望记录中圆形ID和名称与我指定的值匹配。
将这两个条件的!=
更改为=
,并在括号前加上not
declare @rn varchar(20) = 'Value 1';
declare @round nvarchar(15) = 'Value 2';
select distinct
rfr.RFId
, r2.name
, dc.Code
, r.RoundId
from review.RF rf
inner join review.RFRound rfr
on rfr.RFId = rf.RFId and isnull(rfr.IsDeleted, 0) = 0
inner join review.Round r
on r.RoundAutoId = rfr.RoundAutoId
inner join dc.DeficiencyCode dc
on dc.DeficiencyCodeId = rf.DeficiencyCodeId
inner join review.SR sr
on sr.SRId = rf.SRId
inner join reftype.Review r2
on r2.ReviewId = sr.ReviewId
where not (
r.RoundId = @round
and r2.name = @rn
)
要仅包含额外匹配其中一个参数的结果,请添加
and (
r.RoundId = @round
or r2.name = @rn
)
,可能(或可能不)帮助您考虑where
条件
您的问题的前提是您正在应用nand
逻辑,这是not and
的缩写,转换为not ( condition and condition )
。
NAND:
+---+---+----------+
| A | B | A NAND B |
+---+---+----------+
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
+---+---+----------+
答案 1 :(得分:0)
删除'!'从你的条件
DECLARE @rn VARCHAR(20) = 'Value 1'
DECLARE @round NVARCHAR(15) = 'Value 2'
SELECT DISTINCT rfr.RFId, r2.Name ,dc.Code, r.RoundId
FROM review.RF rf
JOIN review.RFRound rfr ON rfr.RFId = rf.RFId AND ISNULL(rfr.IsDeleted,0)=0
JOIN review.Round r ON r.RoundAutoId = rfr.RoundAutoId
JOIN dc.DeficiencyCode dc ON dc.DeficiencyCodeId = rf.DeficiencyCodeId
JOIN review.SR sr ON sr.SRId = rf.SRId
JOIN reftype.Review r2 ON r2.ReviewId = sr.ReviewId
WHERE r.RoundId = @round
AND r2.Name = @rn