【发布时间】:2020-10-01 20:37:44
【问题描述】:
我有一个名为 Employee 的表,其中包含列:
- EMPID INT(主键)
- EMPNAME VARCHAR2(100)
样本数据如下:
empid|empname|
-----|-------|
1|Mary |
2|Bob |
我有另一个表Employee_Skills 有列:
- EMPID INT
- 技能 VARCHAR2(100)
其中的一个样本可以表示如下:
empid|skill |
-----|------|
1|SKILL |
1|Java |
1|C++ |
1|Python|
2|C++ |
2|Python|
在第二张表中,两列共同构成主键。而EMPID 有一个引用约束指向Employee(EMPID)。
我希望所有员工都具备 Mary 所拥有的所有技能。
例如,
select t2.skill
from Employee t1
join Employee_Skills t2 on (t1.EMPID = t2.EMPID)
where t1.EMPNAME = 'Mary'
此查询返回以下行:
SKILL
------------
Java
C++
Python
... (a few more)
现在我想选择所有具备上述技能的员工(可以拥有更多技能,但至少应该具备 Mary 拥有的技能)。
我做了一些尝试,但没有什么能完全满足我的需要。
这是一次失败的尝试:
select t1.EMPID, t1.EMPNAME
from Employees t1
join Employee_Skills t2 on (t1.EMPID = t2.EMPID)
where t2.SKILL = ALL (select t4.skill
from Employee t3
join Employee_Skills t4 on (t3.EMPID = t4.EMPID)
where t3.EMPNAME = 'Mary');
【问题讨论】:
-
请提供代表性数据并标记您正在使用的特定 DBMS(Oracle、Postgres、DB2、Microsoft SQL Server)
标签: sql oracle count relational-division