SQL连接列上的两个表

SQL连接列上的两个表,sql,database,Sql,Database,有两张表:部门和员工 部门: DID DName PhoneExt ADM Administration 100 CLT Client Services 101 DAT Data Conversion 102 EMPLOYEE EID EName Salary MID DID e001 Martin 57000 CLT e002 West 39000 e001 CLT e003 Wilson 64000 DAT

有两张表:部门和员工 部门:

DID DName           PhoneExt 
ADM Administration  100 
CLT Client Services 101 
DAT Data Conversion 102 

EMPLOYEE
EID EName Salary   MID   DID 
e001 Martin 57000        CLT 
e002 West 39000   e001   CLT 
e003 Wilson 64000        DAT 
e004 Patel 48000  e003   DAT 
e005 Rae 42000    e001   CLT 
e006 Jones 36000  e003   DAT 
e007 Dunn 52000   e003   PRG
(SELECT EID FROM EMPLOYEE WHERE DID = 'CLT')
如何列出经理来自客户的员工的姓名和ID
服务部门?

列出姓名和ID:

SELECT EName, EID
在这些雇员中:

FROM EMPLOYEE
其经理来自:

WHERE MID IN
客户服务部:

DID DName           PhoneExt 
ADM Administration  100 
CLT Client Services 101 
DAT Data Conversion 102 

EMPLOYEE
EID EName Salary   MID   DID 
e001 Martin 57000        CLT 
e002 West 39000   e001   CLT 
e003 Wilson 64000        DAT 
e004 Patel 48000  e003   DAT 
e005 Rae 42000    e001   CLT 
e006 Jones 36000  e003   DAT 
e007 Dunn 52000   e003   PRG
(SELECT EID FROM EMPLOYEE WHERE DID = 'CLT')

您可以使用以下查询:

SELECT EID, EName FROM EMPLOYEE WHERE MID IN (SELECT EID FROM EMPLOYEE WHERE DID = 'CLT')

正如Dour、Mohamed、Rafa等人所建议的那样,使用子查询是很好的,但是,通过自连接employee表,您可以在没有子查询的情况下更有效地执行此操作:

SELECT
   emp.Ename,
   emp.EID
FROM
   EMPLOYEE emp

   INNER JOIN EMPLOYEE mngr
   ON emp.MID = mngr.EID
WHERE
   mngr.DID = 'CLT'

注意-实际上根本不需要使用department表…

客户服务在CLT上有一个DID。选择*from employee where DID='CLT'将起作用。如果您想使用完整的DName,那么您需要一个内部连接。非常基本的SQL,请先尝试一下,如果您仍然有问题,请发布您的尝试,我们很乐意帮助您更详细地解释问题。您的输出应该是什么样的。当您使用良好的语法并以易于阅读的方式格式化数据时,溢出程序总是喜欢这样做!: