从表 x
你想要三组记录,每组都是从同一个表中选择的 X
- X1 过滤表 X 中 a='stuff' 和 b='junk' 的记录
- X2 过滤表 X 中 a='arg' 和 b='blarg' 的记录
- X3 过滤表 X 中 a='narf' 和 b='foo' 的记录
到目前为止,我们有三个“逻辑视图”,它们是 X 的独立子集,分别称为 X1、X2、X3
加入 ( ... ) 其中 X1.c = X2.c = X3.c
解释可能有点模棱两可,令人困惑,让我们试试:
从字面上看:c 是表 X 的一个字段的名称
- 案例A: c 是一个键(唯一约束),那么 X 的每条记录(因此 X1,X2,X3)都有唯一的 c 值,因此不存在 X1.c = X2.c = X3.c 的任何记录; 这种情况下的解决方案就像 ==> SELECT 0 一样简单
- case B:c 不是键,而是可能包含重复值的字段;我们可以将这种情况分成两种(或更多)可能的解释
- 案例 B1:我们只想考虑和计算 X1.c = X2.c = X3.c 的那些记录;这包括来自子集 X1、X2、X3 的仅那些在所有其他子集中具有 c 值的记录。
- 案例 B2:我们要计算 X1.c、X2.c、X3.c 的所有可能组合
所有这些情况似乎都特别奇怪,所以我提出了另一种解释,一种最常见的情况,但并不完全遵循连接的概念:
我们要计算 X1,X2,X3 的并集;
在这种情况下,解决方案是:
SELECT COUNT(*) FROM X
WHERE (a='stuff'AND b='junk')
OR (a='arg' AND b='blarg')
OR (a='narf' AND b='foo')
警告:我完全理解“联合”与“加入”完全不同,因此如果你真的是指加入,这种解释可能是完全错误的,但探索这种含义的可能性似乎很有用。