2017-02-03 4 views
0

User_Details USER_ID、ステータス(1/0)、名前のは、JOIN - など

地域、三つの領域を持つ:US、ヨーロッパ、アジア、それぞれのID#1,2、および3

がUSER_ID、REGION_ID、およびステータス私がしようとしています(1/0)

が含まれている様々な領域へのアクセス権を与えるREGION_IDとUSER_IDをマップをUser_Region_Mappingとクエリを作成します。すべての単一領域をACTIVE(別名ステータス= 1)ユーザに割り当て、User_Region_Mappingテーブルに既に存在する冗長データポイントを避けます(既存のデータはそこに残します)。

したがって、すべてのアクティブ・ユーザーIDに3つの行があり、ステータスIDは1,2,3です。ステータスはnullにできないため、ステータスIDはすべて1に設定されます。助けてください

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

!!:私は、JOIN CROSSの組み合わせを使用する必要がありますし、LEFTを知って はTABLESため

スクリプトを登録しよう

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

あなたはでこれを行うことができます。

+0

ユーザステータス= 1はどうですか?すべてのリージョンユーザマッピングステータスを1に設定しますか? – user7470849

+0

これを外側のwhere節に追加します。 – MikeS

関連する問題