のための合体を避けるために、私は次のデータベースの構造を有する:どのように重複するテーブル
tblShelter
ShelterId
PetId
ClientIdを
ShelterName
住所
tblClient
ClientIdを
PetId
tblPet
PetId
PetName
ので、ペットは避難所に避難所または登録クライアント(採択ペット)に属することができます。次のようにだから私のシェルターのテーブルにデータがある
は:
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