【问题标题】:First and Last names in a table do not match with ID's表中的名字和姓氏与 ID 不匹配
【发布时间】:2016-06-01 19:39:47
【问题描述】:

大家好,这是我的问题。 (TRANSACT-SQL)

我有两个表,表 1 是我的主表,它包含所有学生 ID,以及关联的名字和姓氏(学生 ID、名字、姓氏)

表 2 有成绩不及格的学生。问题是,学生的名字和姓氏与任何 ID 都不匹配,例如,整个 studentID 列是空白的(全是 NULL 值,因为它是空白的)。 (姓名正确,见表2)

如何编写某种查询(或更新)以使用正确的 ID 永久填充此列。 (同样,表 1 中提供了名字、姓氏和匹配的 ID 列)

如果更容易的话,我可以合并名字和姓氏列,但我更愿意这样保留它们。

谢谢!

【问题讨论】:

  • 这是糟糕的设计。如果学生 ID 是您的唯一标识符,则应为存储成绩不及格的学生的表设置一个学生 ID 字段,以将其与特定学生联系起来。这在您的不及格分数表中称为“外键” - 它指向学生表中学生 ID 的“主键”。除了在极少数情况下,学生的名字和姓氏不应存储在除定义学生的表之外的任何表中。这称为“数据库规范化”。
  • 嗯,是的,我知道键等,无论是主键还是外键。这实际上是我想要设置的。问题是,这是我的朋友给我的一个示例数据库的练习,我无法修复它。所以它是故意设计得很糟糕的。我遇到的问题只是我需要填写此列。我也了解数据库规范化,参加过 Microsoft 数据库基础课程。我打算在我解决这个问题之后再做这件事,还有几个问题。我非常感谢您的意见,我应该提到我之前就知道这些概念。

标签: sql tsql


【解决方案1】:

您可以使用UPDATE 查询和FROM 来加入您的表。这里需要注意的是,如果您有多个同名的人,这将中断。

UPDATE t2 
SET t2.id = t1.id
FROM table2 as t2
     INNER JOIN table1 as t1
        ON t2.firstname = t1.firstname AND
           t2.lastname = t1.lastname

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多