sql - 关系代数相当于 SQL "NOT IN"

标签 sql relational-algebra

是否有等价于 SQL 表达式 NOT IN 的关系代数?

例如,如果我有以下关系:

A1  |  A2
----------
x   |  y
a   |  b
y   |  x

我想删除 A1 在 A2 中的关系中的所有元组。在 SQL 中,我可能会查询:
SELECT
    *
FROM
    R
WHERE
    R.A1 NOT IN
        (
        SELECT
            A2
        FROM
            R
        )
/

真正困扰我的是如何在关系代数选择运算符中进行子查询,这可能吗?:

σsome 子查询 hereR

最佳答案

在关系代数中,您可以使用 Carthesian 乘积来完成此操作。就像是:

R - ρa1,a2(πa11,a21(σA11 = A22(ρa11,a21(R) x ρa12, a22(R))))

  • 重命名 R 的列,f.e.从 a1 到 a11(左手)和 a12(右手)
  • 取 R 与重命名列的叉积
  • 选择 a11 等于 a22 的行
  • 投影出 a12 和 a22 并保留 a11 和 a21
  • 重命名为 a1 和 a2

  • 这为您提供了匹配的行。从 R 中减去它以找到不匹配的行。

    关于sql - 关系代数相当于 SQL "NOT IN",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12541731/

    相关文章:

    sql - 将多个右连接重写为左连接

    mysql - 仅当值为空或特定数字时才连接两个表

    c# - SQL Server 中的日期列到 ASP.NET 模型中的 System.DateTime

    relational-algebra - 如何理解关系代数中的除法运算符 `u=r÷s` ?

    mysql - SQL 命令的关系代数公式

    python - 根据 Django 中相关字段的计数进行排序

    mysql - 相当于关系代数中的 GroupBy 和having 子句

    SQL Server 2000 XML 路径 ('') 错误

    sql - 在 CASE 语句中使用 CAST 时出现数据转换错误

    mysql - 为什么此查询会重复结果?