2015-03-07 3 views
0

У меня есть 2 набора данных, поступающих из 2 таблиц.удалять строки на основе источника

Table 1: id, type, source 
Table 2: id, type, source 

Если есть соответствующая запись в table1 и table2 по id и type затем table2 строк имеет приоритет, а строки, поступающие из table1 потребностей, которые будут удалены.

есть ли быстрый способ сделать это?

ответ

1

Если вы хотите удалить их в таблице, то вы можете использовать join:

delete t1 
    from table1 t1 
    where exists (select 1 from table2 t2 where t1.id = t2.id and t1.type = t2.type) 

Если вы хотите запрос, приоритизирует результаты, поэтому они приходят из table2, а затем:

select t2.* 
from table2 t2 
union all 
select t1.* 
from table1 t1 
where not exists (select 1 from table2 t2 where t1.id = t2.id and t1.type = t2.type) 
-1

Я закончил с использованием грубой силы

;WITH 
    CTE_TBL2 AS (SELECT * FROM final WHERE source = 't1') 
, CTE_TBL1 AS (SELECT * FROM final WHERE source = 't2') 
, CTE_DEL AS 
     (
      SELECT 
        * 
      FROM CTE_TBL1 
      WHERE EXISTS ( SELECT 1 
           FROM CTE_TBL2 
           WHERE CTE_TBL1.id  = CTE_TBL2.id 
           AND  CTE_TBL1.type = CTE_TBL2.type 
          ) 
     ) 
DELETE final 
FROM final F 
INNER JOIN CTE_DEL 
ON  F.id  = CTE_DEL.id 
AND  F.type  = CTE_DEL.type 
AND  F.source = CTE_DEL.source 
+0

Указанный вопрос состоит из двух таблиц (не один) – Paparazzi

1

Самым быстрым способом будет быть удаленным на основе присоединения:

DELETE T1 
FROM TABLE1 T1 
JOIN TABLE2 T2 ON T1.ID = T2.ID AND T1.TYPE = T2.TYPE 
Смежные вопросы