【问题标题】:Cross Join is creating a Loop交叉连接正在创建一个循环
【发布时间】:2017-03-07 16:19:45
【问题描述】:

我有三个表,我需要在它们之间创建一个CROSS JOIN,以显示产品的 ID 和名称以及销售它们的商店,这里是一个示例

TABLE_PRODUCT

ID_PRODUCT  |   NAME_PRODUCT  
1           |   Addidas Super Star
2           |   Calvin Klein BAG

TABLE_STORE

ID_STORE |   NAME_STORE 
1        |   ThE 98
2        |   C&A

TABLE_PROD_STOR

ID_STORE  |  ID_PROD
1         |  1
2         |  2

我需要以下格式的结果:

ID STORE  |  STORE  | ID PRODUCT |       PRODUCT      |
1         |  ThE 98 | 1          | Addidas Super Star |
2         |  C&A    | 2          | CALVIN KLEIN HAT   |

我最大的问题是,当我执行CROSS JOIN 时,每个名称都会重复两次。解决办法是什么?

【问题讨论】:

  • 提示:INNER JOIN,而不是 CROSS JOIN
  • 交叉连接意味着从每个表中取出 # 条记录并将它们相乘,因此 2*2*2 = 8 条记录。 (获取 product 中的每条记录并将其与 store 中的每个 reocrd 配对,然后获取结果并将其与 prod_store 中的每个 reocrd 配对)。内连接意味着从每个表中获取与某些键值(如 ID_Product 和 ID_Store)相关的记录,因为 1= 1 和 2=2 使用内连接只能获得 2 条记录。 This blog 在可视化描述连接类型方面做得很好。

标签: sql oracle join cross-join


【解决方案1】:
Select
y.ID_STORE  ,
y.NAME_STORE store ,
x.ID_PRODUCT,
x.NAME_PRODUCT  product
from
TABLE_PRODUCT x inner join
TABLE_STORE y 
   on x.ID_PRODUCT =y.ID_STORE 
inner join TABLE_PROD_STOR z
   on x.ID_PRODUCT =z.ID_STORE  

【讨论】:

    猜你喜欢
    • 2022-06-14
    • 1970-01-01
    • 2021-11-20
    • 2013-06-29
    • 2018-09-16
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 2016-05-21
    相关资源
    最近更新 更多