2017-02-03 2 views
0

User_Details с user_id, Статус (1/0), имя и т.д.Объединение двух таблиц в существующую таблицу с третьей CROSS JOIN -

Регионы, с тремя регионами: США, Европа, Азия, с соответствующим ID # 1,2 и 3.

User_Region_Mapping, отображающие user_id с region_id, которые дают доступ к различным регионам, который содержит user_id, region_id, и состояние (1/0)

Я пытаюсь создать запрос, который dds каждый отдельный регион для каждого пользователя ACTIVE (aka status = 1), избегая избыточных точек данных, которые уже существуют в таблице User_Region_Mapping (оставляя там существующие данные).

Таким образом, каждый активный идентификатор пользователя имеет три строки с идентификаторами региона 1,2,3, где для каждого из них установлено значение 1, поскольку статус не может быть нулевым. Я знаю, что я должен использовать сочетание CROSS JOIN и LEFT JOIN

SCRIPTS для ТАБЛИЦЫ:

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") 
} 

Пожалуйста, помогите !!

ответ

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) 

Синтаксис не может быть совершенным, но оно дает вам идею.

+0

Как насчет статуса пользователя = 1 и установить для всего региона-пользователя статус отображения 1? – user7470849

+0

добавьте это во внешнее предложение where. – MikeS

Смежные вопросы