【发布时间】:2013-08-10 03:17:47
【问题描述】:
我想在group by 的聚合函数中的布尔列上执行OR,从逻辑上讲,我为此选择了Max 函数。但我在 MS Access 中发现了 TRUE < FALSE!似乎 MS Access 将 TRUE 别名为 -1 而不是 1。
我在 MySQL 中尝试过同样的方法,似乎工作正常:
mysql> select if(TRUE > FALSE, 1, 0);
+------------------------+
| if(TRUE > FALSE, 1, 0) |
+------------------------+
| 1 |
+------------------------+
这是为什么呢?为什么 Access 在这里打破了 SQL 规范?
【问题讨论】:
-
我认为没有任何关于将布尔值映射到整数值的 SQL 规范。
-
您在谈论 Microsoft Access,您为什么期望任何符合标准的行为 ;)
-
在我看来,TRUE/FALSE 应该只被视为真值,因此没有大小。这使得讨论
TRUE > FALSE是否毫无意义。毕竟TRUE + 1 = FALSE有意义吗?不,不是这样,为什么有人要担心TRUE > FALSE?他们不应该,这就是答案。 -
@NealB SQL:2011 Foundation section 8.2 比较谓词指出:“在布尔值的比较中,True 大于 False”