mysql - 使用 CROSS JOIN 将两个表合并到现有的第三个表中 -

标签 mysql sql

User_Details,包含 User_ID、状态 (1/0)、名称等

区域,包含三个区域:美国、欧洲、亚洲,各自的 ID# 1,2 和 3。

User_Region_Mapping 将 User_ID 与 Region_ID 进行映射,从而可以访问包含 User_ID、Region_ID 和 Status (1/0) 的不同区域

我正在尝试创建一个查询,将每个区域添加到每个 ACTIVE(也称为 status = 1)用户,避免 User_Region_Mapping 表中已存在的冗余数据点(将现有数据保留在那里)。

因此,每个事件用户 ID 都有三行,区域 ID 为 1、2、3,其中所有行的状态都设置为 1,因为状态不能为空。 我知道我必须使用 CROSS JOIN 和 LEFT JOIN 的组合

表格脚本:

 CREATE TABLE "MYDB"."USER_REGION_MAPPING" 
   (    "USER_ID" NUMBER NOT NULL ENABLE, 
    "REGION_ID" NUMBER NOT NULL ENABLE, 
    "STATUS" NUMBER NOT NULL ENABLE, 
    "CREATED_BY" VARCHAR2(50), 
    "MODIFIED_BY" VARCHAR2(50), 
}


CREATE TABLE "MYDB"."USER_DETAILS" 
   (    "ID" NUMBER, 
    "LOGIN_ID" VARCHAR2(100), 
    "EMAIL_ID" VARCHAR2(150) NOT NULL ENABLE, 
    "REGION_CODE" NUMBER, 
    "FIRST_NAME" VARCHAR2(50), 
    "MIDDLE_NAME" VARCHAR2(50), 
    "LAST_NAME" VARCHAR2(50), 
    "IS_PRIMARY" NUMBER, 
    "STATUS" NUMBER NOT NULL ENABLE, 
     PRIMARY KEY ("ID")
}

 CREATE TABLE "MYDB"."REGIONS" 
   (    "ID" NUMBER, 
    "CODE" VARCHAR2(20 CHAR), 
    "NAME" VARCHAR2(20 CHAR), 
    "IS_DEFAULT" NUMBER, 
    "STATUS" NUMBER, 
    "CREATED_BY" VARCHAR2(50), 
    "MODIFIED_BY" VARCHAR2(50), 
    "CREATED_DATE" DATE, 
    "MODIFIED_DATE" DATE, 
     PRIMARY KEY ("ID")
}

请帮忙!!

最佳答案

您可以通过以下方式执行此操作:

insert into User_Region_mapping
(fieldlist)
select (fieldlist)
from USER_DETAILS, REGIONS
where USER_DETAILS.STATUS = 1
  and REGIONS.STATUS = 1
  and not exists (select *
                   from USER_REGION_MAPPING
                   where USER_DETAILS.id = USER_REGION_MAPPING.USER_ID 
                   and USER_DETAILS.id 
                              = USER_REGION_MAPPING.REGION_ID= REGIONS.ID)

语法可能并不完美,但它给了你想法。

关于mysql - 使用 CROSS JOIN 将两个表合并到现有的第三个表中 -,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42029509/

相关文章:

mysql - 我如何在MYSQL中写入 'WHEN MATCHED THEN UPDATE'

php - PDO fetch 方法改变了 pdo 对象本身

c# - 将 Entity Framework 4.4 与 Mysql 结合使用

java - Jooq实体映射

mysql - 外键,障碍多多有用?

php - 在 php 中为 $_POST 刷新一次

mysql - mysql比较varchar到datetime

sql - Microsoft SQL Server Native Client 10.0 登录超时已过期

mysql - 比较两个表的计数

mysql - 三张表的两次求和和内连接的SQL语句