首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >包含相同列的表的笛卡尔积

包含相同列的表的笛卡尔积
EN

Stack Overflow用户
提问于 2015-11-26 15:31:16
回答 2查看 4K关注 0票数 2

我真的很困惑。我找了很多教程,但找不到明确的答案。

代码语言:javascript
运行
复制
A  B        B  D
1  X        x  5
2  x        y  6
            x  4

我想跨越这两个表。A,B,B,d是属性。

代码语言:javascript
运行
复制
A  B   B  D
1  X   x  5
2  x   x  5
1  X   y  6
2  x   y  6
1  X   x  4
2  x   x  4

按照笛卡尔的规则,这应该是正常的答案。横过所有的行。但我对同一栏B感到困惑。同一栏似乎是两次?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-29 03:49:00

一些关系查询语言/代数关系已排序列名。因此,属性名可以命名多个列。(应该有一种逐列引用一列的方法。)笛卡尔乘积运算符可以接受任意两个关系,因为属性名称在输出(或输入)上出现不止一次并不是一个问题。

一些关系查询语言/代数笛卡尔乘积运算符在输出时更改属性名。输入关系有关联的名称。(输入包括关系变量/常量的名称或关系值包含名称。)每个输出列名都是输入列名和输入关系名称的组合。笛卡尔乘积算子可以取任意两个关系。因为以不同关系出现的列在输入上具有相同的属性名,因此将通过输出上的输入关系名称来区分列。

一些关系查询语言/代数两者兼有。笛卡尔乘积算子可以取任意两个关系。

一些关系查询语言/代数关系只有一个属性名的副本。因此,只有当输入不共享任何属性名时,才能调用笛卡尔乘积。(这只是自然连接和/或EQUIJOIN的一个特例。)如果您有输入共享列名,并且希望每个输入列都有一个列的输出,那么您需要重命名列,这样在您加入之前所有列都是不同的。

因此,您必须密切关注关系查询语言/代数具有什么样的关系和运算符。

PS: SQL查询语言

SELECT表达式的FROM子句构成表的临时笛卡尔积。每个列名都是以给定的表名或表别名为前缀的输入列名,加上一个点。这是上面笛卡尔积的名字.虚线名称在SELECT表达式的其余部分中使用。SELECT子句最终删除前缀和点。因此,在SELECT表达式之外的SQL表值中没有点。(列也是有序的,并且可以有重复的列名。)

如果SQL表表达式是AB & BD,那么您只需要

代码语言:javascript
运行
复制
SELECT * FROM AB ab CROSS JOIN BD bd
票数 2
EN

Stack Overflow用户

发布于 2015-11-26 15:36:25

你不只是需要以下几点;

代码语言:javascript
运行
复制
SELECT * FROM TAbleA CROSS JOIN TableB
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33942237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档