Исправление повторяющихся клиентов в SQL - PullRequest
2 голосов
/ 25 марта 2012

Я использую Java на сервере SQL, и у меня проблема с БД для дублированных клиентов (многие клиенты дублируются следующим образом). Мои таблицы:

CUSTOMER(person_id,customer_id)
ORDER (order_id,person_id )

и дублированный клиент выглядит так:

CUSTOMER(333,040535743)
CUSTOMER(334,040535743)
CUSTOMER(335,040535743)

ORDER (1,333 )
ORDER (2,333 )

ORDER (4,334 )
ORDER (5,334 )
ORDER (6,334 )

ORDER (7,335 )
ORDER (8,335 )
ORDER (9,335 )


CUSTOMER(336,009530650)
CUSTOMER(337,009530650)

ORDER (10,336 )
ORDER (11,336 )
ORDER (12,336 )

ORDER (13,337 )
ORDER (14,337 )
ORDER (15,337 )

333,334,335 - это три строки для одного и того же клиента, поскольку у них один и тот же customer_id, я хочу сохранить только последнего клиента (335) и сделать все заказы 334 и 333 со ссылкой на 333.

мои окончательные данные должны быть:

CUSTOMER(335,040535743)
ORDER (1,335)
ORDER (2,335)

ORDER (4,335)
ORDER (5,335)
ORDER (6,335)

ORDER (7,335 )
ORDER (8,335 )
ORDER (9,335 )



CUSTOMER(337,009530650)

ORDER (10,337)
ORDER (11,337)
ORDER (12,337)

ORDER (13,337 )
ORDER (14,337 )
ORDER (15,337 )

как мне сделать запрос для всех моих дублированных клиентов? (У меня есть запрос, возвращающий список customer_id, которые имеют дубликаты)

Ответы [ 2 ]

2 голосов
/ 25 марта 2012

Обновление таблицы Order:

UPDATE o
SET o.person_id = cc.max_person_id
FROM
    [Order] AS o
  JOIN
    Customer AS c
        ON c.person_id = o.person_id
  JOIN
    ( SELECT customer_id
           , MAX(person_id) AS max_person_id
      FROM Customer
      GROUP BY customer_id
    ) AS cc
        ON cc.customer_id = c.customer_id ;

Затем обновите таблицу Customer:

UPDATE c
SET c.person_id = cc.max_person_id
FROM
    Customer AS c
  JOIN
    ( SELECT customer_id
           , MAX(person_id) AS max_person_id
      FROM Customer
      GROUP BY customer_id
    ) AS cc
        ON cc.customer_id = c.customer_id ;

После этого было бы хорошо определить Customer(person_id) как PRIMARY KEY или с ограничением UNIQUE.

И ограничение FOREIGN KEY от Order(person_id) до Customer(person_id)

0 голосов
/ 25 марта 2012

начать с этого:

select person_id from customer where customer_id = 040535743

тогда что-то вроде:

select * from orders where person id in ( select person_id from customer where customer_id = 040535743 )

тогда вы можете играть с MAX person_id в результатах.

...