select * from 员工表 a where exists(select 1 from 工作表 b inner join 公司表 c on c.公司编号=b.公司编号 and b.员工编号=a.员工编号 and c.公司名称='A1') and exists(select 1 from 工作表 b inner join 公司表 c on c.公司编号=b.公司编号 and b.员工编号=a.员工编号 c.公司名称='A2')
select a.员工编号,a.员工姓名 from 员工表 a inner join 工作表 b on a.员工编号=b.员工编号 inner join 公司表 c on b.公司编号=c.公司编号 where c.公司名称 in('A1','A2') group by a.员工编号,a.员工姓名 having COUNT(distinct b.公司编号)=2
select from 员工表 a where (select count(distinct 公司名称) from 工作表 t1 inner join 公司表 t2 on t1.公司编号=t2.公司编号 where 员工编号=a.员工编号 and 公司名称 in ('A1','A2'))=2
select t1.* from 员工表 t1 , ( select t1.* from 工作表 t1 , 公司表 t2 where t1.公司编号 = t2.公司编号 and t2.公司名称 = 'A1' ) t2, ( select t1.* from 工作表 t1 , 公司表 t2 where t1.公司编号 = t2.公司编号 and t2.公司名称 = 'A2' ) t3 where t1.员工编号 = t2.员工编号 and t1.员工编号 = t3.员工编号
--有三张表 --员工表(员工编号,姓名,性别,住址) go if object_id('emp')is not null drop table emp go create table emp( empid varchar(10) primary key, empname varchar(20) not null, sex varchar(5) check(sex in('男','女')), addr varchar(50) ) insert emp select 'EMP1001','张三','男','辽宁省大连市开发区' union all select 'EMP1002','李四','女','辽宁省大连市甘井子区'union all select 'EMP1003','王五','女','辽宁省大连市金州区'union all select 'EMP1004','刘能','男','辽宁省大连市保税区'union all select 'EMP1005','本三','男','辽宁省大连市中山区' --公司表 (公司编号,公司名称,地址) go if object_id('company')is not null drop table company go create table company( companyid varchar(10) primary key, companyname varchar(30) not null, comaddr varchar(50) ) go insert company select 'IOS200901','腾讯','辽宁省大连市高新区' union all select 'IOS200902','创维','辽宁省大连市中山区' union all select 'IOS200903','新浪','辽宁省大连市开发区' union all select 'IOS200904','阿里巴巴','辽宁省大连市高新区' --工作表(员工编号,公司编号,工作时间) go if object_id('empcompany')is not null drop table empcompany go create table empcompany( empid varchar(10) not null, companyid varchar(10) not null, dutytime varchar(20) not null ) go insert empcompany select 'EMP1001','IOS200901','8:00到16:30'union all select 'EMP1002','IOS200902','8:00到16:30'union all select 'EMP1003','IOS200903','8:00到16:30'union all select 'EMP1004','IOS200904','8:00到16:30'union all select 'EMP1005','IOS200901','8:00到16:30'union all select 'EMP1001','IOS200902','8:00到16:30'union all select 'EMP1002','IOS200901','8:00到16:30'union all select 'EMP1003','IOS200904','8:00到16:30' --问下如何查询 --既在A1公司工作又在A2公司工作的员工信息(A1,A2是公司名称)求高手select emp.empid,emp.empname from empcompany inner join emp on emp.empid=empcompany.empid inner join company on company.companyid= empcompany.companyid where company.companyname in('腾讯' ,'创维') group by emp.empid,emp.empname having count(distinct companyname)=2 /* --结果表 EMPID EMPNAME EMP1001 张三 EMP1002 李四 */
select lable1.WORDno,emp.empname from ((select * from WORD where WORDname ='A1') lable1 inner join (select * from WORD where WORDname ='A2') lable2 on lable1.WORDno=lable2.WORDno) LEFT JOIN emp ON lable1.WORDno=emp.empno
where exists(select 1 from 工作表 b inner join 公司表 c on c.公司编号=b.公司编号 and b.员工编号=a.员工编号 and c.公司名称='A1')
and exists(select 1 from 工作表 b inner join 公司表 c on c.公司编号=b.公司编号 and b.员工编号=a.员工编号 c.公司名称='A2')
from 员工表 a inner join 工作表 b on a.员工编号=b.员工编号
inner join 公司表 c on b.公司编号=c.公司编号
where c.公司名称 in('A1','A2')
group by a.员工编号,a.员工姓名
having COUNT(distinct b.公司编号)=2
select from 员工表 a where (select count(distinct 公司名称) from 工作表 t1 inner join 公司表 t2 on t1.公司编号=t2.公司编号 where 员工编号=a.员工编号 and 公司名称 in ('A1','A2'))=2
select t1.* from 员工表 t1 ,
(
select t1.* from 工作表 t1 , 公司表 t2 where t1.公司编号 = t2.公司编号 and t2.公司名称 = 'A1'
) t2,
(
select t1.* from 工作表 t1 , 公司表 t2 where t1.公司编号 = t2.公司编号 and t2.公司名称 = 'A2'
) t3
where t1.员工编号 = t2.员工编号 and t1.员工编号 = t3.员工编号
--员工表(员工编号,姓名,性别,住址)
go
if object_id('emp')is not null
drop table emp
go
create table emp(
empid varchar(10) primary key,
empname varchar(20) not null,
sex varchar(5) check(sex in('男','女')),
addr varchar(50)
)
insert emp
select 'EMP1001','张三','男','辽宁省大连市开发区' union all
select 'EMP1002','李四','女','辽宁省大连市甘井子区'union all
select 'EMP1003','王五','女','辽宁省大连市金州区'union all
select 'EMP1004','刘能','男','辽宁省大连市保税区'union all
select 'EMP1005','本三','男','辽宁省大连市中山区'
--公司表 (公司编号,公司名称,地址)
go
if object_id('company')is not null
drop table company
go
create table company(
companyid varchar(10) primary key,
companyname varchar(30) not null,
comaddr varchar(50)
)
go
insert company
select 'IOS200901','腾讯','辽宁省大连市高新区' union all
select 'IOS200902','创维','辽宁省大连市中山区' union all
select 'IOS200903','新浪','辽宁省大连市开发区' union all
select 'IOS200904','阿里巴巴','辽宁省大连市高新区'
--工作表(员工编号,公司编号,工作时间)
go
if object_id('empcompany')is not null
drop table empcompany
go
create table empcompany(
empid varchar(10) not null,
companyid varchar(10) not null,
dutytime varchar(20) not null
)
go
insert empcompany
select 'EMP1001','IOS200901','8:00到16:30'union all
select 'EMP1002','IOS200902','8:00到16:30'union all
select 'EMP1003','IOS200903','8:00到16:30'union all
select 'EMP1004','IOS200904','8:00到16:30'union all
select 'EMP1005','IOS200901','8:00到16:30'union all
select 'EMP1001','IOS200902','8:00到16:30'union all
select 'EMP1002','IOS200901','8:00到16:30'union all
select 'EMP1003','IOS200904','8:00到16:30'
--问下如何查询
--既在A1公司工作又在A2公司工作的员工信息(A1,A2是公司名称)求高手select emp.empid,emp.empname from empcompany
inner join emp on emp.empid=empcompany.empid
inner join company on company.companyid= empcompany.companyid
where company.companyname in('腾讯' ,'创维')
group by emp.empid,emp.empname
having count(distinct companyname)=2
/*
--结果表
EMPID EMPNAME
EMP1001 张三
EMP1002 李四
*/
((select * from WORD where WORDname ='A1') lable1 inner join
(select * from WORD where WORDname ='A2') lable2 on lable1.WORDno=lable2.WORDno) LEFT JOIN emp ON lable1.WORDno=emp.empno