Я столкнулся с проблемой здесь, мне нужно сделать запрос, который, как это следующим образом:Выберите Distinct для нескольких присоединяется
select client.name, client18n.display_name
FROM Client client
JOIN TEAM team on (client.id = team.client_id)
JOIN TEAM_KGK_USER members on (members.team_members_id = team.id)
JOIN USER users on (users.id = members.user_id
JOIN CLIENT_I18N client18n on (client.id = client18n.client_id)
Where users.id = @userId
Основная идея запроса, мне нужно, чтобы вернуть всех клиентов, данные моего идентификатор пользователя, поскольку пользователь является частью нескольких команд, и каждая команда имеет одного клиента, который владеет этой командой. но я не могу вернуть дубликаты клиентов, так что я пытался использовать отчетливый, но чем я несколько проблем:
- Один клиента может владеть несколькими командами, которые пользователь является членом
- Еще где положение в том, что Мне нужно получить локаль из Client_I18N, для данного идентификатора языка, который пользователь может передать в этот запрос, но, например, я могу передать fr_FR, но если этого не существует для этого клиента, мне нужно вернуть отображаемое имя для en_US как fall back
- Мне нужно принять во внимание, что запрос будет иметь макс и выключен
- Мне нужно заказать по клиентуI18n.display_name
Я использую базу данных Oracle, чтобы проиллюстрировать мои проблемы здесь мы идем:
Представьте пользователя: Джон является членом команды А, команда B, команда C и команда D
поэтому соответствующие клиенты из этих команд являются:
Команда A: Clientâ Команда Б: Clientâ команды C: ClientB команды D: ClientC
для клиенты, они имеют несколько значений в ClientI18N:
Clientâ: ClientA_US Clientâ: ClientA_FR
ClientB: ClientB_US ClientB: ClientB_FR
и пойти на ...
так, если я смотрю на пользователь John
Вернет дважды ClientA для меня, даже если я использую различные, потому что я буду отличаться от client.name и client18n.display_name.
Я попытался вернуться, чем просто имя client.name, поскольку это уникальное значение, но мне нужно заказать By client18n.display_name, потому что если я не сделаю смещение, это не сработает.
это то, что я получаю, когда я выполнить запрос, например:
NAME DISPLAY_NAME
Client_38276QVAAU3 GTA_38276QVAAU3
Client_38276QVAAU GTA_38276QVAAU
Client_38276QVAAU el cliente!
Client_38276QVAAU3 der client!
Client_38276QVAAU2 le client!
Client_38276QVAAU2 GTA_38276QVAAU2
, как вы можете видеть, даже если я использую отчетливый будет возвращать дублирующиеся имя клиента
Вам нужно будет предоставить запрос, который вы действительно хотите запустить.Примеры данных, желаемые результаты могут помочь объяснить, почему «выбрать отличный» - очевидное решение - не делает то, что вы хотите. –
Кроме того, всегда рекомендуется включать соответствующий тег RDBMS, а также тег конкретной версии, с которым вы работаете. –
Какая СУБД вы используете? Postgres? Oracle? –