我有一个表,其中一个列(属性)包含名字、姓氏、帐号和与数据库中的事物相关的任何其他信息等信息。另一列 (attributeType) 包含一个数字,指示属性是什么,例如 1 可能是名字,2 姓氏和 3 帐号等。还有另一列 (enddate) 通过在那里有一个日期来指示记录是否是当前的。通常它会在当前设置为 9999 年,否则设置为过去的某个日期。描述同一事物的所有数据在另一列(实体)中也具有唯一值,因此实体列中具有相同编号的每条记录都将描述一个人。例如
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# 列中没有任何内容输出的名字和姓氏,但它不是最新的。我做错了什么,如何更正此查询?