2016-03-29 19 views
0

で子テーブルに親テーブルから非重複データの挿入しますテーブルから しかし、私のシナリオB列のレコードのとき:は、私は2つのテーブルを持っているSQL Server 2008の

TENANT_ID,   
CUSTOMER_PART_NUMBER,  
SHIPPING_ID,  
EFFECTIVE_DATE   

がテーブルAに同じですが、私はそれがテーブルB に挿入されますしたくない私は、クエリを使用して試してみました:

INSERT INTO OSUSR_1SV_QAD_PO_DATA 
    (TENANT_ID, 
    CUSTOMER_PART_NUMBER, 
    LEAR_PART_NUMBER, 
    SHIPPING_ID, 
    CUSTOMER_NAME, 
    PROGRAM_NAME, 
    EFFECTIVE_DATE, 
    END_DATE, 
    CHANGE_ID, 
    PO_NUMBER, 
    PO_PRICE) 
SELECT 
    TENANT_ID, 
    CUSTOMER_PART_NUMBER, 
    LEAR_PART_NUMBER, 
    SHIPPING_ID, 
    CUSTOMER_NAME, 
    PROGRAM_NAME, 
    EFFECTIVE_DATE, 
    END_DATE, 
    CHANGE_ID, 
    PO_NUMBER, 
    PO_PRICE 
FROM 
OSUSR_1SV_STAGING_FTP A 
WHERE 
not exists 
(SELECT TENANT_ID, 
    CUSTOMER_PART_NUMBER, 
    LEAR_PART_NUMBER, 
    SHIPPING_ID, 
    CUSTOMER_NAME, 
    PROGRAM_NAME, 
    EFFECTIVE_DATE, 
    END_DATE, 
    CHANGE_ID, 
    PO_NUMBER, 
    PO_PRICE 
    FROM OSUSR_1SV_QAD_PO_DATA B 
    WHERE 
     A.TENANT_ID = B.TENANT_ID 
     and A.CUSTOMER_PART_NUMBER = A.CUSTOMER_PART_NUMBER 
     and A.SHIPPING_ID = B.SHIPPING_ID 
     and A.EFFECTIVE_DATE = B.EFFECTIVE_DATE) 

ここで、列TENANT_ID、CUSTOMER_PART_NUMBER、SHIPPING_ID、EFFECTIVE_DATEのレコードが同じ場合、重複レコードは挿入されません。

親切にお手伝いします。最初の画像では

enter image description here

がテーブルOSUSR_1SV_STAGING_FTP
TENANT_IDに基づいて重複データ、
CUSTOMER_PART_NUMBER、
SHIPPING_ID、
EFFECTIVE_DATE

があるしかし、私はのようにデータを挿入する必要があります重複のないテーブルOSUSR_1SV_QAD_PO_DATAの画像2 TENANT_ID、
CUSTOMER_PART私はこのクエリ(B.TENANT_ID = A.TENANT_IDとB.CUSTOMER_PART_NUMBER = A.CUSTOMER_PART_NUMBER ON OSUSR_1SV_STAGING_FTP B
を用い
MERGE OSUSR_1SV_QAD_PO_DATA A
を試みた_number、
SHIPPING_ID、
EFFECTIVE_DATE
enter image description here


およびB.SHIPPING_ID = A.SHIPPING_IDおよびB.EFFECTIVE_DATE = A.EFFECTIVE_DATE)
これが一致したとき
DELETE THEN一致しないWHERE ID NOT IN(GROUP BY CUSTOMER_PART_NUMBER、SHIPPING_ID OSUSR_1SV_STAGING_FTP
FROM MIN(ID)_
を選択)

INSERT(TENANT_ID、CUSTOMER_PART_NUMBER、LEAR_PART_NUMBER、SHIPPING_ID、CUSTOMER_NAME、PROGRAM_NAME、EFFECTIVE_DATE、END_DATE、 CHANGE_ID、PO_NUMBER、PO_PRICE)
VALUES(B.TENANT_ID、B.CUSTOMER_PART_NUMBER、B.LEAR_PART_NUMBER、B.SHIPPING_ID、
B.CUSTOMER_NAME、B.PROGRAM_NAME、B.EFFECTIVE_DATE、B.END_DATE、B.CHANGE_ID、B。 PO_NUMBER、B.PO_PRICE);

+0

はなぜクエリの仕事はしていませんか? –

答えて

1

この部分を交換し

not exists 
(SELECT 1 
FROM OSUSR_1SV_QAD_PO_DATA B 
WHERE 
    A.TENANT_ID = B.TENANT_ID 
    --and A.CUSTOMER_PART_NUMBER = A.CUSTOMER_PART_NUMBER --you are Comparing same value here 
    and A.CUSTOMER_PART_NUMBER = B.CUSTOMER_PART_NUMBER 
    and A.SHIPPING_ID = B.SHIPPING_ID 
    and CAST(A.EFFECTIVE_DATE AS DATE) = CAST(B.EFFECTIVE_DATE AS DATE)) 
+0

私は働いていません..私は重複したレコードを含むすべてのレコードを取得しています。 – Rains

+0

編集した部分がきれいに表示されています..画像が添付されています ITS not working TOO – Rains

+0

@Rainsあなたは私が実証したのと全く同じように試しましたか? –

0

は、このクエリをお試しください:

 INSERT INTO OSUSR_1SV_QAD_PO_DATA 
(TENANT_ID, 
CUSTOMER_PART_NUMBER, 
LEAR_PART_NUMBER, 
SHIPPING_ID, 
CUSTOMER_NAME, 
PROGRAM_NAME, 
EFFECTIVE_DATE, 
END_DATE, 
CHANGE_ID, 
PO_NUMBER, 
PO_PRICE) 

Select TENANT_ID, 
CUSTOMER_PART_NUMBER, 
LEAR_PART_NUMBER, 
SHIPPING_ID, 
CUSTOMER_NAME, 
PROGRAM_NAME, 
EFFECTIVE_DATE, 
END_DATE, 
CHANGE_ID, 
PO_NUMBER, 
PO_PRICE 
from OSUSR_1SV_STAGING_FTP A 

INNER JOIN (select TENANT_ID,CUSTOMER_PART_NUMBER,SHIPPING_ID,EFFECTIVE_DATE from OSUSR_1SV_STAGING_FTP 
    group by TENANT_ID,CUSTOMER_PART_NUMBER,SHIPPING_ID,EFFECTIVE_DATE) as NoDuplicate ON A.TENANT_ID=NoDuplicate.TENANT_ID 
関連する問題