【问题标题】:How to combine two columns in relational algebra?如何在关系代数中合并两列?
【发布时间】:2021-04-09 05:46:42
【问题描述】:

我有一个表格查询

select member.first_name||' '||member.last_name as member_name
from member
MINUS
select distinct member.first_name||' '||member.last_name as member_name
from member,borrow_record
where member.id = borrow_record.member_id

我认为这个查询的关系代数表达式类似于

π(member.first_name,member.last_name)(member) - π(member.first_name,member.last_name)(σ(member.id = borrow_record.member_id)(member ⨯ borrow_record))

但我不知道如何组合名为 first_name 和 last_name 的两列

【问题讨论】:

  • 有很多 RA(关系代数)。它们在运算符甚至关系是什么方面都不同。给你的定义和参考。例如教科书名称、版本和页码。定义“转换”——同样的结果?相同的结构?嵌套的 RA 调用形成了一种编程语言。因此,即使您实际上并没有运行代码,也要尽可能多地提供minimal reproducible example。但是——谷歌“在线运行关系代数”。 PS你被分配了什么确切的任务? PS以这种方式“组合”字符串是字符串操作而不是关系操作;知道你有哪些字符串运算符以及在哪里可以调用它们。

标签: sql oracle relational-algebra


【解决方案1】:

首先,您的 SQL 中存在逻辑错误。两个不同的member 记录可能具有不同的first_name 和不同的last_name,但最终会得到相同的串联member_name

您(大概)希望您的查询返回没有借款记录的成员的姓名。您的代码不能可靠地实现这一点。相反,MINUS 应该在 select member.first_name, member.last_name 之间应用,就像您的 RA 代码一样。

我不知道如何组合名为 first_name 和 last_name 的两列 [在关系代数中]

简短的回答:组合字符串列不是代数的工作。

正如@philipxy 指出的那样,RA 有很多种。它们具有用于限制和组合关系值的运算符。他们中的大多数甚至对于列之间的算术都没有字段级运算符,更不用说字符串处理了。

Codd 1972(RA 形式的最早设计)没想到代数包括特定领域的操作(他的“领域”大致对应于编程语言中的现代“类型”)。相反,查询会将其结果提供给一些传统的编程语言,以便进一步操作。

【讨论】:

    猜你喜欢
    • 2019-09-27
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多