2016-08-11 49 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