这可能是我遗漏了一些非常基本的东西.这是一个场景:

表格

  • T1期

-你在做什么?

  • ID(UUID)
  • Id_e(UID)
  • 类别(VARCHAR)
SELECT COUNT(*)
FROM T1期

| count |
|-------|
| 700000|

当搜索特定行时,它返回零行

SELECT COUNT(*)
FROM T1期
WHERE id = '7ea67ae0-aef8-4944-bfb4-b9e04b42143a'::UUID
AND id_e = 'fa9763f5-c9e0-4de3-be57-ab3149fb1b9f'::UUID
AND category = 'A+'

| count |
|-------|
|      0|

当搜索与相同条件不匹配的任何行时,它返回的行数比第一个查询少

SELECT COUNT(*)
FROM T1期
WHERE id <> '7ea67ae0-aef8-4944-bfb4-b9e04b42143a'::UUID
AND id_e <> 'fa9763f5-c9e0-4de3-be57-ab3149fb1b9f'::UUID
AND category <> 'A+'

| count |
|-------|
| 385221|

这项标准有何不妥?它似乎表现得像是ORAND

推荐答案

您的标准是

id = '7ea67ae0-aef8-4944-bfb4-b9e04b42143a'::UUID
AND id_e = 'fa9763f5-c9e0-4de3-be57-ab3149fb1b9f'::UUID
AND category = 'A+'

可以被否定为

NOT
(
id = '7ea67ae0-aef8-4944-bfb4-b9e04b42143a'::UUID
AND id_e = 'fa9763f5-c9e0-4de3-be57-ab3149fb1b9f'::UUID
AND category = 'A+'
)

De Morgan's laws

enter image description here

证明

A B NOT(A或B)(NOT A)AND(NOT B):

I.A=0,B=0:

  • NOT(A或B)=1
  • (非A)AND(非B)=1

二、A=0,B=1:

  • NOT(A或B)=0
  • (非A)AND(非B)=0

三、A=1,B=0:

  • NOT(A或B)=0
  • (非A)AND(非B)=0

四、A=1、B=1:

  • NOT(A或B)=0
  • (非A)AND(非B)=0

Composite case

让我们假设

A=A1和A2

我们要计算出

不是(A和B).

就这样.

非(A和B)=

(非A)或(非B)=

(非(A1和A2))或(非B)=

((非A1)OR(非A2))OR(非B)=

(非A1)或(非A2)或(非B)

因此,

NOT(A、B和C)=(非A)或(非B)或(非C)

因此

NOT
(
id = '7ea67ae0-aef8-4944-bfb4-b9e04b42143a'::UUID
AND id_e = 'fa9763f5-c9e0-4de3-be57-ab3149fb1b9f'::UUID
AND category = 'A+'
)

等同于:

(
(NOT id = '7ea67ae0-aef8-4944-bfb4-b9e04b42143a'::UUID)
OR (NOT id_e = 'fa9763f5-c9e0-4de3-be57-ab3149fb1b9f'::UUID)
OR (NOT category = 'A+')
)

What your mistake was

你想否定A、B和C,但你做到了(不是A)和(不是B)和(不是C).现在,让我们考虑A为假,但B和C为真的情况.在这种情况下,A和B以及C和(不是A)和(不是B)和(不是C)都将是假的,因此,它们显然不是彼此的否定.

Sql相关问答推荐

Postgresql -如何计算刷卡和刷卡时间

如何更改函数返回的列名?

如何使用PostGIS从单个表中 Select 所有相交面组

Postgres,使用iLike运算符从json数组中搜索的工作方式与从常规表中搜索不同

为什么在postgres中,横向连接比相关子查询快?

了解放置时的连接

如何在presto中映射id与名称

如何为该查询编写正确分区依据

组合2个分区表的postgres视图的执行计划正在访问所有分区

插入具有预期逻辑的查询以Forking 表

配置单元查询失败:无法识别';附近的输入;LEFT'';(select子句中的';';col'

将SQL Server查询改进为;线程安全;

按二维数组的第一个元素排序

SQL 搜索 - 获取最大值日期的奇怪行为

Spark / Hive:如何获取列中正值的百分比?

如何计算两个非周期性时间序列+分组的重叠持续时间

在where语句中使用CTE非常缓慢

在自引用表中使用分组和计数的SQL查询语句

插入行时的行安全策略问题

Oracle SQL 查询自行运行,但在包装到select count(*) from ()时失败