可能是我错过了一些非常基本的东西。这是一个场景:
表格
- T1
列:
- id(UUID)
- id_e(UUID)
- 类别(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|
这个标准有什么问题?看起来它的行为类似于OR
或AND
1条答案
按热度按时间6yoyoihd1#
您的标准
可以被否定为
德摩根定律
证明
A B NOT(A OR B)(NOT A)AND(NOT B):
I. A = 0,B = 0:
II. A = 0,B = 1:
III. A = 1,B = 0:
IV. A = 1,B = 1:
复合案例
让我们假设
A = A1和A2
我们要计算
非(A和B)。
所以:
NOT(A AND B)=
(NOT A)OR(NOT B)=
(NOT(A1和A2))或(非B)=
((NOT A1)OR(NOT A2))OR(NOT B)=
(NOT A1)或(非A2)或(非B)
因此
NOT(A AND B AND C)=(NOT A)OR(NOT B)OR(NOT C)
因此
等同于:
你犯了什么错
你想否定A和B和C,但你做了(不是A)和(不是B)和(不是C)。现在,让我们考虑A为假,但B和C为真的情况。在这种情况下,A AND B AND C和(NOT A)AND(NOT B)AND(NOT C)都将是假的,因此,它们显然不是彼此的否定。