Выбрать из нескольких таблиц, удалить дубликаты - PullRequest
3 голосов
/ 03 апреля 2012

У меня есть две таблицы в БД SQLite, и обе имеют следующие поля:

idnumber, имя, отчество, фамилия, адрес электронной почты, логин

Одна таблица содержит все эти заполненные,другой не имеет идентификатора или второго имени.

Мне бы хотелось иметь возможность делать что-то вроде:

select idnumber, firstname, middlename, lastname, email, login 
from users1,users2 group by login;

Но я получаю "неоднозначную" ошибку.Делать что-то вроде:

select idnumber, firstname, middlename, lastname, email, login from users1 
union 
select idnumber, firstname, middlename, lastname, email, login from users2;

СМОТРИТ, как это работает, но я вижу дубликаты.Насколько я понимаю, объединение не должно разрешать дубликаты, но, возможно, они не являются реальными дубликатами, поскольку во второй пользовательской таблице не заполнены все поля (например, «20, bob, alan, smith, bob@bob.com, bob"не то же самое, что" NULL, Боб, NULL, Смит, bob@bob.com, Боб ").

Есть идеи?Что мне не хватает?Все, что я хочу сделать, это дедупликация на основе «логина».

Спасибо!

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012

Как вы говорите, union удалит дубликаты записей (обратите внимание, что union all не будет!).Две записи считаются дубликатами, когда все значения их столбцов совпадают.В примере, который вы рассмотрели в своем вопросе, ясно, что NULL не равно 20 или 'alan', поэтому эти записи не будут считаться дубликатами.

Редактировать:

[...] я могу думать только о том, чтобы создать новую таблицу [...]

В этом нет необходимости.Я думаю, что вы можете сделать следующее:

select login, max(idnumber), max(firstname), max(middlename), max(lastname),
  max(email) from (
    select idnumber, firstname, middlename, lastname, email, login from users1 
    union 
    select idnumber, firstname, middlename, lastname, email, login from users2
) final
group by login

Однако, если вы уверены, что у вас есть только разные значения на idnumber и middlename, вы можете максимизировать только эти поля и сгруппировать по всем остальным.

0 голосов
/ 03 апреля 2012

Вы можете присоединиться к неполной таблице к полной через логин.Затем программно манипулируйте полученным набором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...