我有一个SQL查询,它执行以下操作:
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
var data = {
"1": {
"average percent match": 0.2916666667,
"match counts": 1.0,
"confidence": 0.25
},
"0": {
"average percent match": 0.25,
"match counts": 1.0,
"confidence": 0.25
},
}
var total =0;
$.each(data, function (i, item) {
total += item["match counts"];
});
alert("Total of match counts is: " + total);
两列TEST1和TEST2应该是对立的,但TEST2始终为false。知道为什么吗?
答案 0 :(得分:0)
唯一想到的是:
col1 col2 col3 'D' 'E'
此处col1 = 'A' OR col2 = 'B' OR col3 = 'C'
会产生unknown
,因为NULL = 'C'
既不会评估为true也不会评估为false。表达式不正确,因此第一个IIF
会产生'false'
。
NOT (col1 = 'A' OR col2 = 'B' OR col3 = 'C')
也是unknown
,因为unknown
的反面既不是真也不是假。表达式不正确,因此第二个IIF
也会产生'false'
。
这可能是您所看到的结果的原因吗?
答案 1 :(得分:0)
Gordon Linoff指出,如果某些值为null
,您的代码将无法正常工作,除此之外,您应该看到预期的结果。
请注意null = 'A'
是null
,而不是false
。 ergo not(null = 'A')
也是null
。
create table t (col1 char(1), col2 char(1), col3 char(1));
insert into t values
('A','A','A')
,('A','B','C')
,('A','B',null)
,(null,null,null)
,('Z','Z',null)
,('Z','Z','Z');
select *,
iif ( (col1 = 'A' or col2 = 'B' or col3 = 'C'), 'true', 'false') as test1,
iif (not(col1 = 'A' or col2 = 'B' or col3 = 'C'), 'true', 'false') as test2
from t;
rextester演示:http://rextester.com/CRYH34782
返回:
+------+------+------+-------+-------+
| col1 | col2 | col3 | test1 | test2 |
+------+------+------+-------+-------+
| A | A | A | true | false |
| A | B | C | true | false |
| A | B | NULL | true | false |
| NULL | NULL | NULL | false | false |
| Z | Z | NULL | false | false |
| Z | Z | Z | false | true |
+------+------+------+-------+-------+
您可以将专栏封装在isnull()
或coalesces()
中,以便为null
提供替换值。