У меня есть следующая структура базы данных:Как избежать COALESCE дубликатов таблиц
tblShelter
ShelterId
PetId
ClientId
ShelterName
Адрес
tblClient
ClientId
PetId
tblPet
PetId
PetName
Так, Pet может принадлежать убежище или зарегистрированному клиенту убежище (подаренный).
Так что мой Shelter таблица содержит следующие данные:
ShelterId PetId ClientId ShelterName
1 100 NULL Test
1 NULL 101 Test
1 102 NULL Test
Итак, мне нужно, чтобы получить все PetNames для каждого приюта (прямой приют домашних животных или клиенты)
Вот мой запрос:
Select Coalesce(p.PetName, pclient.PetName) as PetName
from tblShelter s
Left Join tblPet p
on p.PetId = s.PetId
Left Join (select p2.PetId, p2.PetName
from tblClient c
join tblPet p2
on c.PetId = p2.PetId) pclient
on s.PetId = pclient.PetId
where shelterId=1
Вопрос: Можно ли оптимизировать этот запрос? В настоящее время это выглядит не очень красиво. Обратите внимание, что структура базы данных показана для простоты. К сожалению, его нельзя изменить. Можно ли легко избавиться от коалесценции или избавиться от подзапроса?
Привет, Дэймиен, благодарю вас за ответ. Я не пытаюсь удалить COALESCE как таковой. Просто хочу упростить мой запрос и сделать его максимально эффективным. Можете ли вы объяснить, как достичь более умного состояния? – user194076
@ user194076 - 'p.PetId = COALESCE (s.Petid, c.PetId)' –
Удивительный! Позвольте мне попробовать это по моему запросу – user194076