【问题标题】:SQL Cartesian Products, Cross JOIN how are they useful?SQL Cartesian Products, Cross JOIN 它们有什么用?
【发布时间】:2015-07-16 00:29:57
【问题描述】:

我正在阅读Tutorialspoint 中表上的交叉联接/笛卡尔积,但看不到笛卡尔积/交叉联接的用处。

例子:

宠物桌:

+----------+--------+---------+------+------------+------------+
| name     | owner  | species | sex  | birth      | death      |
+----------+--------+---------+------+------------+------------+
| Fluffy   | Harold | cat     | f    | 1993-02-04 | NULL       |
| Claws    | Gwen   | cat     | m    | 1994-03-17 | NULL       |
| Buffy    | Harold | dog     | f    | 1989-05-13 | NULL       |
| Fang     | Benny  | dog     | m    | 1990-08-27 | NULL       |
| Bowser   | Diane  | dog     | m    | 1989-03-31 | 1995-07-29 |
| Chirpy   | Gwen   | bird    | f    | 1998-09-11 | NULL       |
| Whistler | Gwen   | bird    | NULL | 1997-12-09 | NULL       |
| Slim     | Benny  | snake   | m    | 1996-04-29 | NULL       |
| Puffball | Diane  | hamster | f    | 1999-03-30 | NULL       |
| Jenny    | Robert | dog     | f    | 2004-01-01 | 2014-05-04 |
+----------+--------+---------+------+------------+------------+

事件表:

+----------+------------+----------+------------------------------+
| name     | date       | type     | remark                       |
+----------+------------+----------+------------------------------+
| Fluffy   | 1995-05-15 | litter   | 4 kittens, 3 females, 1 male |
| Buffy    | 1993-06-23 | litter   | 5 puppies, 2 female, 3 male  |
| Buffy    | 1994-06-19 | litter   | 3 puppies, 3 female          |
| Chirpy   | 1999-03-21 | vet      | needed beak streightened     |
| Slim     | 1997-08-03 | vet      | broken rib                   |
| Bowser   | 1991-10-12 | kennel   | NULL                         |
| Fang     | 1991-10-12 | kennel   | NULL                         |
| Fang     | 1998-08-28 | birthday | Gave him new chew toy        |
| Claws    | 1998-03-17 | birthday | Gave him a flea collar       |
| Whistler | 1998-12-09 | birthday | First birthday               |
+----------+------------+----------+------------------------------+

交叉连接:select * from pet, event;select * from pet cross join event;

输出一个表,该表是 10 行 X 10(100 行)行在几个不同排列中的乘积。这有什么用以及如何使用?

【问题讨论】:

标签: mysql join


【解决方案1】:

一个例子:

假设所有宠物都应该有所有事件的记录,你如何找到缺少哪些行?

使用交叉连接可以获得宠物/事件的笛卡尔积,如果所有宠物都有所有事件的记录,则事件表应该包含该结果。然后,您可以加入(或使用集合差异)来查找丢失的行。

【讨论】:

    【解决方案2】:

    我上次使用它的时间:

    我们有一个通知服务,我们在可能引发错误的进程和可能想要接收错误的人之间建立了多对多的连接。当某些事情发生故障时,一个进程将通知多个人,并且人们将收到多个进程的通知。

    我们从一个数据库迁移到另一个数据库并丢失了所有 ID(它们是自动生成的,因此在我们插入新数据库时它们会发生变化)。所以我需要将所有流程与所有用户联系起来。所以我只是做了一个基于交叉连接的插入。

    【讨论】:

      猜你喜欢
      • 2010-10-06
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 2013-07-19
      相关资源
      最近更新 更多