2014-02-14 3 views
0

У меня есть две таблицыудалить повторяющиеся строки, соответствующие с другой таблицей

Table A      Table B 
    --------      --------- 

    a b c      a b c 
    a b c      a b c 
    a b c      a b c 
    e f g      a b c 
    h i j      e f g 
    k l m      k l m 
           k l m 
           x y z 
           s t u 
           a b c 
           a b c 

Теперь я хочу, чтобы удалить строки в таблице B соответствия на колонке 1, 2 и 3 с таблицей А, где отсчет каждого дубликата строки в таблице B должна быть меньше или равна таблицей А.

Так выход должен быть

Table A      Table B 
    --------      --------- 

    a b c      a b c 
    a b c      a b c 
    a b c      a b c 
    e f g      e f g 
    h i j      k l m 
    k l m      x y z                  
           s t u 

Я попытался с помощью внутреннего соединения и пересекаются, но не получить желаемый результат.

+0

вы можете вставить структуру таблицы? вам будет проще помочь вам, вы можете использовать sqlfiddle.com – jcho360

ответ

2

Try:

DELETE FROM tableB 
WHERE ctid IN (
    SELECT BB.ctid 
    FROM (
    SELECT a, b, c, count(*) cnt 
    FROM tablea 
    GROUP BY a, b, c 
    ) AA 
    JOIN (
    SELECT ctid, 
      a, b, c, 
      row_number() over (partition by a,b,c) cnt 
    FROM tableb 
    ) BB 
    ON AA.a = BB.a 
     AND AA.b = BB.b 
     AND AA.c = BB.c 
     AND AA.cnt < BB.cnt 
) 

демо: http://sqlfiddle.com/#!12/73e99/1

-2

Я думаю, что если таблица невелика, просто удалить все строки из TableB, которые существуют в TableA, а затем вставить TableA в TableB. Другим способом ИМХО требуется хотя бы первичный ключ в TableB.

DELETE FROM TableB 
      WHERE EXISTS(SELECT * FROM TableA 
            WHERE C1=TableA.C1 
             AND C2=TableA.C2 
             AND C3=TableA.C3) ; 

INSERT INTO TableB SELECT * FROM TableA; 
+0

он хочет хранить дубликаты в таблицеB, если они присутствуют в таблицеA – Leo

+1

@Leo Но если строки дублируются, и нет первичного ключа, как вы может решить, какой из вас следует удалить? – valex

+0

он/она не хочет удалять дубликаты из таблицы, он/она хочет удалить строки из одной таблицы, которых нет в другом – Leo

Смежные вопросы