有没有一种方法可以实现操作(让我们注释它 ∘),它的行为就像常规交叉连接一样,除了空集它返回非空边。
∘ - new operation
x - cross join
{} - empty result set
A ∘ B = A x B
A ∘ {} = A
{} ∘ B = B
{} ∘ {} = {}
A 和 B 的列不同且非空。
有没有一种方法可以实现操作(让我们注释它 ∘),它的行为就像常规交叉连接一样,除了空集它返回非空边。
∘ - new operation
x - cross join
{} - empty result set
A ∘ B = A x B
A ∘ {} = A
{} ∘ B = B
{} ∘ {} = {}
A 和 B 的列不同且非空。
这对你有用吗?
如果空集,你的意思是“有零列”,那么
CROSS JOIN
空的 SELECT 已经做到了:请注意,空选择(无列)是 PostgreSQL 中相对较新的添加。在旧版本上,上述查询将导致语法错误。
对该问题的另一种解释可能是,在 中
A ∘ {}
,A 是具有某些列的表类型,并且{}
是具有不同列但恰好包含 0 行的任意不同的表类型。在那种情况下,SQL 中将没有满足该问题的操作,因为查询的结果类型不能依赖于关系的内容。它必须始终只依赖于相关关系的定义,这样就可以在不实际运行查询的情况下确定它。