据我了解,[
{
field_data :
[
{ k:v for k, v in thing.items() if k != 'field' }
for thing in things if thing['field']['data'] == field_data
]
for field_data in set(thing['field']['data'] for thing in things)
}
]
本质上是产生笛卡尔乘积的叉积。 CROSS JOIN
,INNER JOIN
,RIGHT JOIN
,LEFT JOIN
还是笛卡尔积,除了事实是它们不产生重复项并且对其应用了某些条件?
谢谢!
注意:我不认为这是重复的 。该链接未详细说明与我所寻找的细节的区别。留给读者来挖掘和推断差异。我在下面提供的答案有望为读者节省一些时间。
答案 0 :(得分:-1)
交叉联接将一个表中的所有行与另一表中的所有行匹配。内部联接在一个或多个字段上匹配。如果您的一张表有10行,而另一张表有10行,则这两个联接的行为将有所不同。
交叉连接将返回100行,并且它们将不相关,只是所谓的笛卡尔乘积。内部联接将彼此匹配记录。假设其中一个具有主键,而另一个具有外键,则将返回10行。
![1]:https://www.sunnyhoi.com/app/uploads/2017/07/inner-join-vs-cross-join-in-sql-server.jpg
查看更多信息答案 1 :(得分:-1)
可以将JOIN操作指定为CARTESIAN PRODUCT操作 然后执行SELECT操作。
...
JOIN的结果是具有n + m个属性Q(A1,A2, ...,An,B1,B2,...,Bm)的顺序; Q每个有一个元组 无论何时,只要元组的组合(一个来自R,一个来自S) 组合满足连接条件。这是主要区别 在笛卡尔积和JOIN之间。在JOIN中,仅以下各项的组合 满足连接条件的元组出现在结果中,而在 笛卡尔积的所有元组组合都包含在 结果。连接条件是从两个属性中指定的 关系R和S,并针对每个元组组合进行评估。 连接条件求值为TRUE的每个元组组合 作为单个组合元组包含在结果关系Q中。
资料来源:《数据库系统基础》(第7版),Elmasri