2016-08-11 46 views
1
FirstTable 

ColumnOne | TabletwoCol | TablethreeColumn | 
1  | 2   | 5    | 
2  | 3   | 6    | 
3  | 8   | 10    |  

SecondeTable (TableTwo) 

TabletwoCol | Coln | 
2   | ABC | 
3   | lmn | 
8   | as | 
1515  | addd | 

我想用合併由 SecondeTable(TableTwo)指Tabletwocol
即刪除我Seconde系列表中刪除以下行應該被刪除簡單合併刪除失敗

2   | ABC | 
    3   | lmn | 
    8   | as | 

應該被刪除

我寫了

MERGE SecondeTable PB USING 
      (SELECT DD.TabletwoCol FROM FirstTable DD) temptable 
           ON PB.TabletwoCol =temptable.TabletwoCol 
           WHEN MATCHED THEN 
           DELETE; 

我不明白爲什麼它不會工作。

+0

您可以從發佈的源和目標表中的數據集 – scsimon

+0

增加了一些數據和簡化的預期輸出 –

+1

爲什麼你需要在這裏使用一個合併?這是一個簡單的刪除語句,合併只是在這裏不需要。 –

回答

0

如果我理解正確的,你想從SecondTable刪除,如果沒有在FirstTable匹配。試試這個

--DROP TABLE #FirstTable; 
--DROP TABLE #SecondTable; 
CREATE TABLE #FirstTable 
    (
     ColumnOne INT 
    , TabletwoCol INT 
    , TablethreeColumn INT 
    ); 

INSERT INTO #FirstTable 
     (ColumnOne 
     , TabletwoCol 
     , TablethreeColumn 
     ) 
VALUES (1 -- ColumnOne - int 
     , 2 -- TabletwoCol - int 
     , 5 -- TablethreeColumn - int 
     ); 
CREATE TABLE #SecondTable 
    (
     TabletwoCol INT 
    , Coln CHAR(5) 
    ); 
INSERT INTO #SecondTable 
     (TabletwoCol, Coln) 
VALUES (2 -- TabletwoCol - int 
      , 'ABC' -- Coln - char(5) 
     ), 
     (3 -- TabletwoCol - int 
      , 'def' -- Coln - char(5) 
     ); 
SELECT * 
FROM #FirstTable; 

SELECT * 
FROM #SecondTable; 

MERGE #SecondTable AS Tgt 
USING 
    (SELECT TabletwoCol 
     FROM  #FirstTable 
    ) AS Src 
ON Src.TabletwoCol = Tgt.TabletwoCol 
WHEN MATCHED THEN 
    DELETE; 

SELECT * 
FROM #FirstTable; 
SELECT * 
FROM #SecondTable; 
+0

Drishya它看起來不錯,但對我來說,在我的真實數據執行和它失敗,沒有刪除任何行 –

+0

如果代碼是正確的(和上面的代碼與兩個臨時表應顯示一般,如果代碼可以工作),那麼有三種可能性:您在複製自己的代碼時犯了一個錯誤,記錄實際上不匹配(一個表可能有隱藏字符),或者表上有觸發器以防止刪除。 – HLGEM

+0

我測試了你提供的數據集上的腳本,它工作。請檢查您是否從我發佈的腳本中丟失了某些內容,或者如果您在使用此邏輯的表中沒有匹配。 – Drishya1

0

我不知道它爲什麼不起作用。它對我來說很好。 也許你應該嘗試使用DELETE

DELETE PB 
FROM SecondeTable AS PB 
INNER JOIN FirstTable DD 
    ON PB.TabletwoCol = DD.TabletwoCol; 
+0

感謝@vercelli的快速響應,但我特別想通過合併 –

+1

@PushkarPhule來完成。 OK:select * from SecondeTable AS PB INNER JOIN FirstTable DD ON PB.TabletwoCol = DD.TabletwoCol;'return anything? – vercelli