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/