Уникальные значения SQL - PullRequest
       7

Уникальные значения SQL

2 голосов
/ 29 октября 2011

У меня есть этот запрос, который объединяет 3 таблицы. Кажется, работает, но я получаю дубликаты. Как я могу удалить дубликаты?

SELECT FIRST 100 e.email_id, e.location_id, e.email, l.location_type, p.salutation,
       p.fname, p.lname
FROM email e, location l, person p
WHERE e.location_id = l.location_id
AND l.per_id = p.per_id

Ответы [ 3 ]

4 голосов
/ 29 октября 2011

Простой ответ - добавить DISTINCT к вашему запросу.

SELECT FIRST 100 DISTINCT e.email_id, e.location_id, e.email, l.location_type, p.salutation, p.fname, p.lname
FROM email e, location l, person p
WHERE e.location_id = l.location_id
AND l.per_id = p.per_id
2 голосов
/ 29 октября 2011

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

SELECT FIRST 100 e.email_id, e.location_id, e.email, l.location_type, p.salutation,
       p.fname, p.lname
  FROM email AS e
  JOIN location AS l ON e.location_id = l.location_id
  JOIN person AS p ON l.per_id = p.per_id

Наиболее вероятное место возникновения проблем - таблица «location». Вы можете установить это с помощью запроса, такого как:

SELECT location_id, per_id, COUNT(*)
  FROM location
 GROUP BY location_id, per_id
HAVING COUNT(*) > 1;

Если это возвращает какие-либо данные, то у вас есть указатель на то, где проблема. Затем вы должны изучить, почему у вас нет уникального ограничения на комбинацию location_id, per_id.

2 голосов
/ 29 октября 2011

использовать Distinct

  SELECT FIRST 100 Distinct e.email_id, e.location_id, 
         e.email, l.location_type, p.salutation, 
         p.fname, p.lname 
  FROM email e, location l, person p 
  WHERE e.location_id = l.location_id AND l.per_id = p.per_id 
...