问题标签 [three-valued-logic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
20888 浏览

sql - SQL“或”运算符。在以下场景中它是如何工作的?

我一直在优化查询,遇到了一个让我质疑我一直使用 SQL 的 OR 运算符的情况。(SQL Server 2000 也是)

我有一个查询,其中条件 (WHERE) 子句看起来像这样:

现在,我一直理解 SQL 中的 OR 评估了这两个表达式。因此,所有对左侧表达式评估为 true 的记录将与所有在右侧表达式评估为 true 的记录一起返回。例如:

这将返回 COL1 为“测试”的所有记录以及 Col2 为“数据”的任何记录

在上面的示例中,我将 Column2 条件修改为以下内容:

突然间,我返回了 0 行。

我是否误认为 OR 只评估表达式,直到找到 TRUE 结果,或者是否存在会导致 2 个不同返回不同结果的条件?

0 投票
8 回答
358 浏览

sql - 我应该如何针对可以为空的 SQL 变量测试字段?

我有以下 SQL:

以下两个查询工作正常并按预期使用我的索引:

现在,假设我想将比较值存储在一个变量中,如下所示:

如果@a 为空,则以下查询将不会返回预期结果,因为我应该使用“is”运算符而不是“=”

以下将起作用,但如果@a 为空,则会进行表扫描(因为“测试”行会强制评估第二个括号)

最终,我想出了这个解决方案,它工作正常并使用我的索引:

我对情况的分析正确吗?

有没有更好的方法来处理这种情况?

0 投票
7 回答
1318 浏览

sql - 从数据库模型中消除 NULLable 列的选项(为了避免 SQL 的三值逻辑)?

前段时间,我一直在阅读CJ Date的《 SQL 和关系理论》一书。作者以批评 SQL 的三值逻辑(3VL)而闻名。1)

作者对为什么在 SQL 中应避免使用 3VL 提出了一些要点,但他没有概述如果不允许可空列,数据库模型会是什么样子。我对此进行了一番思考,并提出了以下解决方案。如果我错过了其他设计选项,我想听听它们!

1) Date 对 SQL 3VL 的批评反过来也受到了批评:请参阅Claude Rubinson 的这篇论文(包括 CJ Date 的原始批评)。


示例表:

例如,以下表为例,我们有一个可为空的列 ( DateOfBirth):


NULL选项 1:通过标志和默认值进行模拟:

不是使列可以为空,而是指定任何默认值(例如1900-01-01)。附加BOOLEAN列将指定是否DateOfBirth应该简单地忽略 in 的值,或者它是否实际包含数据。


选项 2:将可为空的列转换为单独的表:

可空列被新表 ( DatesOfBirth) 替换。如果一条记录没有该列的数据,则新表中不会有记录:

虽然这似乎是更好的解决方案,但这可能会导致需要为单个查询连接许多表。由于OUTER JOIN不允许 s (因为它们会引入NULL结果集中),所有必要的数据可能不再像以前那样仅通过单个查询来获取。


问题: 是否还有其他消除方法NULL(如果有,它们是什么)?

0 投票
1 回答
1312 浏览

sql - 如何将三值逻辑应用于 SQL 查询?

我一直在做过去的纸质问题,并不断提出这些涉及 3 个有价值逻辑的问题。我的笔记提到了它,但没有给出与考试中要求的例子相关的例子。

我理解True = 1, False = 0&Unknown = 1/2以及And = Min,Or = Max和的基础Not(x) = 1-x。但是我不知道如何将其应用于以下问题:

在 SQL 中,讨论以下表达式的可能真值:
Ra > Rb OR Ra <= 0 OR Rb >= 0
证明你的答案是正确的。

和:

Owner 表的电话和年龄字段中可能包含空值。考虑所有可能的组合,显示表达式可能返回三个真值中的哪一个:
phone = '141-3304913' OR age <50 OR age >= 50

任何为我澄清这些的帮助将不胜感激:)

0 投票
1 回答
663 浏览

odata - 返回与过滤器不匹配的项目的 OData 请求

我正在尝试编写一个 OData URL,它将从具有一对多关系的相关集合上的过滤器的集合中进行选择。过滤器要求相关的集合项都具有某些属性的特定值。

为了说明这个问题,我为 Northwind 示例 OData 服务编写了一个类似的 URL。此查询应选择所有订单已由同一员工处理的所有客户。 http://services.odata.org/V3/Northwind/Northwind.svc/Customers?$expand=Orders&$filter=Orders/all(o: o/EmployeeID eq 4)&$select=CustomerID,Orders/OrderID,Orders /员工ID

这给出了:

第一个项目确实包含员工 4 处理的所有(在这种情况下,只有一个)订单。对于第二个和第三个,结果集中没有订单项目。进一步检查,http://services.odata.org/V3/Northwind/Northwind.svc/Customers?$expand=Orders&$filter=(CustomerID eq 'FISSA')&$select=CustomerID,Orders/OrderID,Orders/ EmployeeID显示“FISSA”确实没有任何订单(“PARIS”也是如此)。

也许有人可以推断,因为“FISSA”没有任何命令违反过滤谓词,所以谓词成立。事实上,这可能是这个查询在 SQL 中解析的方式:

返回相同的 3 个客户,但加入 Orders 表可以解决这个问题:

只返回“CENTC”。

我认为“FISSA”的过滤谓词未确定,并且按照三值逻辑规则,“FISSA”和“PARIS”不应该出现在结果集中。所以,我认为这是这个 OData 实现中的一个错误。

有人知道正确的 OData 请求查询以排除没有订单的客户吗?

0 投票
1 回答
690 浏览

r - 与 NA 值的数值比较导致 R 中的错​​误子集

有人可以向我解释为什么解析为 NA 的逻辑评估会在基于向量比较的子集中产生虚假行吗?例如:

鉴于这种意外行为,在上述示例中计算收入超过 10 万的员工的首选方法是什么?

0 投票
2 回答
325 浏览

haskell - 三值逻辑值的所有可能组合

是否有一种算法可以引导给定数量的三值逻辑值的所有可能组合?

例如,F(2)应该返回这个列表:

该函数看起来像这样(在 Haskell 中):

0 投票
5 回答
7482 浏览

sql - SQL Server 中的三值逻辑示例

我知道 SQL 使用三值逻辑,但我无法理解如何在实践中使用它,尤其是为什么TRUE || NULL = TrueFALSE && NULL = False不是评估 to null

以下是适用于 SQL Server 的三个有值真值表:

三真值表

我在网上找到了一些关于三值逻辑的解释,但我找不到任何实际使用的代码示例。有人可以向我展示一个使用三值逻辑的代码示例来帮助我更好地理解这一点吗?

0 投票
3 回答
5394 浏览

sql - SQL 未知是否与 NULL 相同?

我很困惑在 3 值逻辑中的 SQL 中 UNKNOWN 意味着什么。它实际上意味着 NULL 吗?NULL 和 UNKNOWN 是否可以在所有布尔上下文中互换?

0 投票
3 回答
78 浏览

c# - 检查带有 NULL 的重复项的 SQL 不会返回

我正在使用 2 个单独的查询来检查重复项,并且两个查询在执行时都应该给出相同的答案,但事实并非如此。下面是我的数据库表数据的示例:

这是我的第一个查询,它显示有重复项

这是我的第二个查询,显示零重复

在查看了查询和表中的数据后,seatNo 中的 NULL 似乎影响了第二个查询并导致它返回 0 个重复项。即使它是NULL,是否有任何解决方案来搜索重复项?