我真的很困惑。我找了很多教程,但找不到明确的答案。
A B B D
1 X x 5
2 x y 6
x 4我想跨越这两个表。A,B,B,d是属性。
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感到困惑。同一栏似乎是两次?
发布于 2015-11-29 03:49:00
一些关系查询语言/代数关系已排序列名。因此,属性名可以命名多个列。(应该有一种逐列引用一列的方法。)笛卡尔乘积运算符可以接受任意两个关系,因为属性名称在输出(或输入)上出现不止一次并不是一个问题。
一些关系查询语言/代数笛卡尔乘积运算符在输出时更改属性名。输入关系有关联的名称。(输入包括关系变量/常量的名称或关系值包含名称。)每个输出列名都是输入列名和输入关系名称的组合。笛卡尔乘积算子可以取任意两个关系。因为以不同关系出现的列在输入上具有相同的属性名,因此将通过输出上的输入关系名称来区分列。
一些关系查询语言/代数两者兼有。笛卡尔乘积算子可以取任意两个关系。
一些关系查询语言/代数关系只有一个属性名的副本。因此,只有当输入不共享任何属性名时,才能调用笛卡尔乘积。(这只是自然连接和/或EQUIJOIN的一个特例。)如果您有输入共享列名,并且希望每个输入列都有一个列的输出,那么您需要重命名列,这样在您加入之前所有列都是不同的。
因此,您必须密切关注关系查询语言/代数具有什么样的关系和运算符。
PS: SQL查询语言
SELECT表达式的FROM子句构成表的临时笛卡尔积。每个列名都是以给定的表名或表别名为前缀的输入列名,加上一个点。这是上面笛卡尔积的名字.虚线名称在SELECT表达式的其余部分中使用。SELECT子句最终删除前缀和点。因此,在SELECT表达式之外的SQL表值中没有点。(列也是有序的,并且可以有重复的列名。)
如果SQL表表达式是AB & BD,那么您只需要
SELECT * FROM AB ab CROSS JOIN BD bd发布于 2015-11-26 15:36:25
你不只是需要以下几点;
SELECT * FROM TAbleA CROSS JOIN TableBhttps://stackoverflow.com/questions/33942237
复制相似问题