Sql查询以解决以下场景
我有一张像这样的桌子:Sql查询以解决以下场景,sql,database,Sql,Database,我有一张像这样的桌子: Employeeid personid reltnship status 111 125 owner active 111 252 prevown active 112 3 descsd active 我想编写一个查询,以获取与'owner'和'prevown'组合关系的员工的所有详细信息。您应该研究mysql查询结构以及查询的子句 以下是查询: select * from
Employeeid personid reltnship status
111 125 owner active
111 252 prevown active
112 3 descsd active
我想编写一个查询,以获取与
'owner'
和'prevown'
组合关系的员工的所有详细信息。您应该研究mysql查询结构以及查询的子句
以下是查询:
select *
from tablename
where reltnship = 'owner'
or reltnship = 'prevown'
使用
Self-JOIN
SELECT DISTINCT S.*
FROM Tbl S JOIN tbl T ON S.Employeeid = T.Employeeid
where S.reltnship = 'owner' AND T.reltnship = 'prevown'
使用子查询返回满足以下条件的所有
employeeid
s:
select * from tablename
where employeeid in (
select employeeid
from tablename
where reltnship in ('owner', 'prevown')
group by employeeid
having count(distinct reltnship) = 2
)
请参阅。结果:
如果需要所有详细信息,则有一种方法使用
exists
:
select t.*
from t
where exists (select 1
from t t2
where t2.employeeid = t.employeeid and
t2.reltnship = 'owner'
) and
exists (select 1
from t t2
where t2.employeeid = t.employeeid and
t2.reltnship = 'prevown'
) ;
这句话的措词是索引友好的。您需要的索引位于(employeeid,reltnship)
上
如果您只希望员工符合此标准,我建议您:
select t.employeeid
from t
where reltnship in ('owner', 'prevown')
group by employeeid
having count(distinct reltnship) = 2;
请更详细地描述您的问题,并添加一个示例输出。在将问题发布到社区之前,也要尝试展示你的尝试。Stackoverflow不是免费的代码编写服务。欢迎使用S/O,但您的问题中缺少一些。您没有employee表或person表的上下文来获取相应的人名,为什么给定的employee ID会有两个不同的person ID值。请编辑问题并提供其他数据以获取姓名信息,或者您是否只想要(在本例中)员工ID=111的两行结果(通过合法查询,而不仅仅是员工ID)您完全错过了所询问的问题。业主和前业主的员工,如出售房屋、汽车等。。。所有权链。当事人是谁。
select t.employeeid
from t
where reltnship in ('owner', 'prevown')
group by employeeid
having count(distinct reltnship) = 2;