【问题标题】:SQL, get foreign key value. Foreign key references the same tableSQL,获取外键值。外键引用同一张表
【发布时间】:2012-11-18 08:54:02
【问题描述】:

MS SQL Server 数据库。

我有这个简单的结构:(对不起,主键不在正确的位置)

在 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

【问题讨论】:

    标签: sql sql-server select key


    【解决方案1】:

    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 语法而不是您在查询中使用的旧语法。 They are the same,但这是推荐的语法。

    【讨论】:

    • SQL server 是否真的允许用单引号指定列别名,单引号表示字符文字,而不是 SQL 中的标识符?
    • @a_horse_with_no_name - 据我所知,是的,它允许使用单引号指定列别名。但我这样写是为了格式化为输出的字符文字。但是您对此有何建议?
    • SQL 标准(以及所有其他 DBMS,如果我没记错的话)要求用双引号将标识符(在这种情况下包含空格等特殊字符)括起来。所以一个有效的列别名应该这样写:chief.Name as "Chief Name"。由于 SQL Server 也理解这种语法,因此我更愿意坚持使用标准。
    【解决方案2】:

    这应该可行:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      • 2013-09-11
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      相关资源
      最近更新 更多