Я столкнулся с ситуацией, когда получил двойные значения от LEFT JOIN
. Я думаю, что это может быть желаемое поведение, но в отличие от того, что я хочу.
У меня есть три таблицы: person
, department
и contact
.
человек:
id bigint,
person_name character varying(255)
:
person_id bigint,
department_name character varying(255)
контакт:
person_id bigint,
phone_number character varying(255)
Запрос Sql -
SELECT p.id, p.person_name, d.department_name, c.phone_number
FROM person p
LEFT JOIN department d
ON p.id = d.person_id
LEFT JOIN contact c
ON p.id = c.person_id;
Результат -
id|person_name|department_name|phone_number
--+-----------+---------------+------------
1 |"John" |"Finance" |"023451"
1 |"John" |"Finance" |"99478"
1 |"John" |"Finance" |"67890"
1 |"John" |"Marketing" |"023451"
1 |"John" |"Marketing" |"99478"
1 |"John" |"Marketing" |"67890"
2 |"Barbara" |"Finance" |""
3 |"Michelle" |"" |"005634"
Я знаю, что такое объединение, сохраняя умноженное на выбранные строки. Но это имеет смысл, как номера телефонов 023451,99478,67890 для обоих отделов, в то время как они связаны только с человеком Джон с ненужными повторными значениями, которые эскалируют проблему с большим набором данных. Итак, вот что я хочу -
id|person_name|department_name|phone_number
--+-----------+---------------+------------
1 |"John" |"Finance" |"023451"
1 |"John" |"Marketing" |"99478"
1 |"John" |"" |"67890"
2 |"Barbara" |"Finance" |""
3 |"Michelle" |"" |"005634"
Это пример моей ситуации, и я использую большой набор таблиц и запросов. Итак, нужно иметь общее решение.