【问题标题】:Setting Null Values to a duplicate row and then keeping only 1 row将空值设置为重复行,然后仅保留 1 行
【发布时间】:2020-02-28 19:19:52
【问题描述】:

我需要你的帮助。

我的数据库将被配置为表明我们的一些员工共享同一个办公室。

但是会发生什么,例如,当我从该办公空间中移除员工时,我只是将 LastName 和 FirstName 列的值设置为“null”。这里的问题是我只想保留相同数据的一行值,而不是基本上包含相同数据的两行。

也许有更好的方法来解决这个问题,因为我对此比较陌生,所以我愿意听取本网站专家的建议。

提前致谢,

这里是有问题的 SQLFiddle:http://sqlfiddle.com/#!18/c31e3/1

CREATE TABLE tbl_accdb (
    Floor varchar(255),
    Office varchar(255),
    LastName varchar(255),
    FirstName varchar(255) 
);

INSERT INTO tbl_accdb (Floor, Office, LastName, FirstName)
VALUES ('2', 'B-47', 'Smith', 'John');

INSERT INTO tbl_accdb (Floor, Office, LastName, FirstName)
VALUES ('2', 'B-47', 'Doe', 'Jane');

UPDATE tbl_accdb
SET
  LastName = null,
  FirstName = null
WHERE Floor = 2 AND Office = 'B-47';

【问题讨论】:

  • 这里的确切逻辑流程是什么?假设 2 楼办公室 B-47 已经在您的表中有一条记录,当有人试图插入重复时会发生什么?
  • sqlservertutorial.net/sql-server-basics/…。还有许多其他网站展示了如何删除重复行。

标签: sql database sql-server-2008 database-design


【解决方案1】:

您要做的第一件事是升级您的数据库。自今年早些时候以来,SQL Server 2008 就不再提供扩展支持,这意味着您甚至不会从您的服务器上获得 Microsoft 的安全更新。是时候升级了。

说了这么多,现在让我们来处理表结构本身。

在这里我要做的第一件事是将您的数据分成两个表 - 一个包含办公室信息,另一个包含员工数据。

在员工表中,我将添加一列作为办公室表的外键,这将指示哪个员工在哪个办公室工作 - 因为一个办公室可以有很多员工,但一个员工只能有一个他们工作的主要办公室。

CREATE TABLE tblOffice (
    Id int identity(1,1) CONSTRAINT PK_Office PRIMARY KEY,
    Floor int, -- Since this is a number, store it as a number.
    Office varchar(255), -- Do you really need all that length?
    -- Other office related data such as capacity etc'
    CONSTRAINT UX_Office UNIQUE (Floor, Office) 
);

CREATE TABLE tblEmployee (
    EmployeeNumber int CONSTRAINT PK_Employee PRIMARY KEY,
    LastName varchar(255),
    FirstName varchar(255),
    -- Other employee related data such as social security number etc'
    OfficeId int CONSTRAINT FK_Employee_Office REFERENCES TblOffice(Id)
);

【讨论】:

    猜你喜欢
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    相关资源
    最近更新 更多