1つの列(属性)に、名、姓、アカウント番号、およびデータベース内の物に関連するその他の情報が含まれるように設定されたテーブルがあります。別の列(attributeType)には、属性が何であるかを示す番号が含まれます。たとえば、1は名、2は姓、3はアカウント番号などです。別の列(enddate)には、日付を指定してレコードが最新かどうかを示します。通常、現在の場合は9999年に設定され、それ以外の場合は過去の日付に設定されます。同じことを説明するすべてのデータは、別の列(エンティティ)でも一意の値を持つため、エンティティ列の同じ番号の各レコードは1人の人物を説明します。例えば
entity attribute attributetype enddate
------ --------- ------------- --------
1 ben 1 9999-1-1
1 alt 2 9999-1-1
1 12345 3 9999-1-1
2 sam 1 9999-1-1
2 smith 2 9999-1-1
2 98765 3 1981-1-1
上記の表から、名前が現在の名前である特定の姓名を持つ人を選択したいのですが、そうでない場合はアカウント番号を出力しません。テーブルがtblAccountと呼ばれると仮定して、名前の部分に対して次のようにします。
select ta1.attribute '1st Name', ta2.attribute 'last name'
from tblAccount ta1
inner join tblAccount ta2 on ta1.entity = ta2.entity
where ta1.attribute = 'sam' and ta2.attribute = 'smith'
and ta1.attributetype = 1 and ta2. attributetype = 2
and ta1.enddate > getdate() and ta2.enddate > getdate()
期待どおりに名前と名前が出力されますが、アカウント番号の列を含めたい場合、何も出力されません。
select ta1.attribute '1st Name', ta2.attribute 'last name', ta3.attribute 'account#'
from tblAccount ta1
inner join tblAccount ta2 on ta1.entity = ta2.entity
left join tblAccount ta3 on ta1.entity = ta3.entity
where ta1.attribute = 'sam' and ta2.attribute = 'smith'
and ta1.attributetype = 1 and ta2. attributetype = 2
and ta1.enddate > getdate() and ta2.enddate > getdate()
and ta3.attributetype = 3 and ta3.enddate > getdate()
私が見たいのは、現在ではない上記の場合、account#列に何も表示されない名前と名前が出力されることです。何が間違っているのでしょうか。また、このクエリを修正するにはどうすればよいですか。