DISTINCT не поможет вам, если в строках есть какие-либо другие столбцы. Очевидно, что в одной из таблиц, к которым вы присоединяетесь, имеется несколько строк для одной строки в другой таблице. Чтобы вернуть одну строку, вам нужно исключить другие несколько строк в таблице, к которой вы присоединяетесь.
Самый простой способ сделать это - усилить условие where или ограничение JOIN, чтобы присоединиться только к той записи, которую вы хотите. Обычно это требует определения правила, которое всегда будет выбирать «правильную» запись из другой таблицы.
Предположим, у вас есть простая проблема, такая как:
Person: Jane
Pets: Cat, Dog
Если вы создадите простое соединение здесь, вы получите две записи для Джейн:
Jane|Cat
Jane|Dog
Это совершенно правильно, если ваша точка зрения состоит в том, чтобы перечислить все комбинации людей и домашних животных. Однако если вместо этого в вашем представлении предполагалось перечислить людей с домашними животными или перечислить людей и показать одного из их домашних животных, вы столкнулись с проблемой, которая возникла у вас сейчас. Для этого вам нужно правило.
SELECT Person.Name, Pets.Name
FROM Person
LEFT JOIN Pets pets1 ON pets1.PersonID = Person.ID
WHERE 0 = (SELECT COUNT(pets2.ID)
FROM Pets pets2
WHERE pets2.PersonID = pets1.PersonID
AND pets2.ID < pets1.ID);
Для этого применяется правило, ограничивающее запись «Домашние животные» в соединении с домашним животным с наименьшим идентификатором (сначала в таблице «Домашние животные»). Предложение WHERE по существу гласит: «если нет домашних животных, принадлежащих одному и тому же человеку с более низким значением ID».
Это даст один результат записи:
Jane|Cat
Правило, которое вам нужно применить к вашему представлению, будет зависеть от данных в ваших столбцах и от того, какая из «множественных» записей должна отображаться в столбце. Однако это приведет к сокрытию некоторых данных, которые могут оказаться не такими, как вы хотите. Например, вышеприведенное правило скрывает тот факт, что у Джейн есть собака. Это выглядит так, как будто у Джейн есть только Кошка, когда это не правильно.
Возможно, вам придется переосмыслить содержание вашего представления и то, что вы пытаетесь достичь с помощью своего представления, если вы начинаете отфильтровывать действительные данные.