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

时间:2017-02-03 17:12:02

标签: mysql sql

具有User_ID,状态(1/0),名称等的

User_Details

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

使用Region_ID映射User_ID的

User_Region_Mapping 可以访问包含User_ID,Region_ID和Status(1/0)的不同区域

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

因此,每个活动用户ID都有三行,区域ID为1,2,3,其中所有状态的status都设置为1,因为status不能为null。 我知道我必须使用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")
}

请帮助!!

1 个答案:

答案 0 :(得分:0)

你可以这样做:

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)

语法可能不完美,但它会给你一个想法。