SQL,如何获取外键值。外键引用相同的表。

5

MS SQL Server数据库。

我有这样一个简单的结构:(对于主键不在正确位置的问题,很抱歉)

enter image description here

在TEACHER表中,我有一个外键“Chief”,它引用TEACHER.ID(同一张表)。在进行SELECT查询时,如何获取不是整数(Teacher.ID),而是主任的名称(TEACHER.Name for Chief)?

以下查询只会得到一个整数(主任的ID):

SELECT DEPARTMENT.Name, TEACHER.Name, TEACHER.IDCode, POST.Name, TEACHER.Tel, TEACHER.Salary, TEACHER.Rise, TEACHER.HireDate, Chief
FROM TEACHER, DEPARTMENT, POST
WHERE TEACHER.ID_Post = POST.ID AND
    TEACHER.ID_Department = DEPARTMENT.ID;
GO
2个回答

13

再次使用JOINTEACHER表连接起来,像这样:

SELECT 
  d.Name, 
  t.Name, 
  t.IDCode, 
  p.Name, 
  t.Tel, 
  t.Salary, 
  t.Rise, 
  t.HireDate, 
  chief.Name 'Chief Name'
FROM TEACHER t 
INNER JOIN TEACHER chief ON t.Chief = chief.ID
INNER JOIN DEPARTMENT d ON t.ID_Department = d.ID
INNER JOIN POST p ON t.ID_Post = p.ID;

请使用ANS-SQL-92的JOIN语法,而不是您查询中使用的旧语法。它们是相同的,但这是推荐的语法。


SQL Server是否真的允许使用单引号指定列别名,这些单引号表示字符字面量而不是SQL中的标识符? - user330315
据我所知,是的,它允许使用单引号指定列别名。但我这样写是为了将其格式化为字符文字输出。但你有什么建议吗? - Mahmoud Gamal
SQL标准(如果我没记错的话,所有其他DBMS也是如此)要求标识符(包含特殊字符,例如这种情况下的空格)用双引号括起来。因此,有效的列别名应该写成这样:chief.Name as "Chief Name"。由于SQL Server也理解这种语法,我更喜欢遵循标准。 - user330315

1

这应该可以工作:

SELECT DEPARTMENT.Name, TEACHER.Name, TEACHER.IDCode
    , POST.Name, TEACHER.Tel, TEACHER.Salary, TEACHER.Rise, TEACHER.HireDate, c.Name as ChiefName
    FROM TEACHER
    join DEPARTMENT on TEACHER.ID_Department = DEPARTMENT.ID
    Join POST on TEACHER.ID_Post = POST.ID
    Left Join TEACHER c on c.ID=TEACHER.Chief

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接