左の結合はここでトリックを行う必要があります
select *
from
LOGS l
left join
PEOPLE p on p.peopleid = l.field and l.join = 'people'
LOGSとPEOPLEの間で正しい関係フィールドを使用したかどうかはわかりませんが、ログタイプがpeopleである結合句を含めると、 PEOPLEエントリが条件付きで返されることがわかります。
異なるテーブルから条件付きで戻りたい場合は、エンティティテーブルによって取り込まれる追加のフィールドが同じである(または少なくとも同じとして識別される)ことを確認する必要があるため、事態はさらに複雑になります。その場合、あなたはUNIONに強制されます。
select
l.*,
p.peopleid as entityid,
p.fullname as displayname
from
LOGS l
left join
PEOPLE p on p.peopleid = l.field and l.join = 'people'
union all
select
l.*,
a.accountid as entityid,
p.accountname as displayname
from
LOGS l
left join
ACCOUNT a on a.accountid = l.field and l.join = 'account'
またはおそらくこれ
select
l.*,
entity.entityid as entityid,
entity.displayname as displayname
from
LOGS l
left join
(
select 'people' as type, p.peopleid as entityid, p.fullname as displayname
from PEOPLE
union all
select 'account', a.accountid, p.accountname
from ACCOUNT
) entity on entity.type = l.join and entity.entityid = l.field
しかし、このように多くのエンティティテーブルを組み合わせてログを返すと、クエリが非常に遅くなる可能性があることを想像できます。