面试的SQL查询问题,是否有性能更好的查询??

今天面试中有一道数据库的查询问题:
有一公司中的同一员工可以属于多个部门,如何用一条查询列出所有的员工,要求符合的条件是:
员工名字中包含John并且属于两个部门以上,部门中要求包含部门A

我的查询如下:
员工表:create table emp(id int primary key, name varchar(100))
部门表:create table depart(id int primary key, name varchar(10))
关系表:create table emp_depart(eid int,did int)

注释:eid 是员工表emp的外键, did 是部门表depart的外键

select AA.id,AA.name,count(emp_depart.did)
from emp_depart,
(
select e.* from emp e, emp_depart ed,depart d where e.id=ed.eid and ed.did=d.id and e.name like '%John%' and d.name='A'
) AA

where AA.id=emp_depart.eid group by AA.id,AA.name having count(emp_depart.did)>1

测试数据如下:

---------------------------------------------------
insert into emp(id,name) values(1,'john 1')
insert into emp(id,name) values(2,'john 2')
insert into emp(id,name) values(3,'Neil 2')

insert into depart(id,name) values(1,'A')
insert into depart(id,name) values(2,'B')
insert into depart(id,name) values(3,'C')


insert into emp_depart(eid,did) values(1,1)
insert into emp_depart(eid,did) values(1,2)
insert into emp_depart(eid,did) values(2,1)
insert into emp_depart(eid,did) values(3,2)
insert into emp_depart(eid,did) values(3,3)

查询结果:只列出一行数据:1,'john 1'

不知道有没有更好的写法??
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值