SQL查询;从列表中搜索列表

SQL Query; Search List from List

我是 SQL 的新人,包括执行查询。每天,我们的组织都会发送一份以列出格式终止的员工名单。我要做的是两件事,在 column 中搜索员工 ID,如果找到该员工,则将某个 cell/field 更新为 disable

例如,如果我们得到一个员工 ID 为 123456234567 的列表,我想在 EMPID 字段中找到这些员工 ID,然后更新他们的从“1”到“0”的活动字段。

最好的方法是什么?

编辑,对于所有遗漏的信息,我深表歉意,因为我对论坛和编码世界是全新的,而且我将重新解释我正在努力完成的事情。也许是一个功能?我更改了下面的数据,使其与我正在处理的数据和示例更加一致。

我们每天都会收到一个文本文件,其中包含已终止的员工 ID 列表,我们需要在我们的应用程序中停用这些 ID。我知道这仍然是手动的,但我认为这是一些自动化的良好开端。

  1. dbo.EnterpriseUsertable上,我们需要代码通过查找IVRID(也就是员工的ID)来找到用户,然后更新IsActive 字段从 10,然后使用相同的格式将 LastModDate 更新为当前日期和时间。下面是我正在使用的示例 table,如果格式不正确,请见谅。

    CREATE TABLE IF NOT EXISTS EnterpriseUser (
    `EnterpriseUserID` INT,
    `FirstName` VARCHAR(6) CHARACTER SET utf8,
    `LastName` VARCHAR(7) CHARACTER SET utf8,
    `IVRID` INT,
    `IsActive` INT,
    `LastModDate` DATETIME
    

    ); 插入企业用户值 (6,'Robert','Andrews',2,1,'2018-07-11 13:01:54.670000');

  2. 第二个 table dbo.Staff 也必须针对应用程序正确更新。我唯一的问题是要找到要更新的记录,我必须使用 dbo.EnterpriseUser 中的 EnterpriseUserID 字段现在位于 dbo.Staff [=62= 上的 StaffID 字段中].

在那一行,LastModDate 必须更改为当前日期,IsActive 必须从 1 更改为 0

CREATE TABLE IF NOT EXISTS Staff (
    `StaffID` INT,
    `FirstName` VARCHAR(6) CHARACTER SET utf8,
    `LastName` VARCHAR(7) CHARACTER SET utf8,
    `LastModDate` DATETIME,
    `IsActive` INT
);
INSERT INTO Staff VALUES
    (6,'Robert','Andrews','2018-07-11 13:01:54.670000',1);

您可以使用像这样的更新语句来做到这一点:

update Employees
set Active = 0
where EmpId in (123456, 234567)

如果您要手动检查它们,可以使用更新语句。

如果您要在 table 中插入员工,您可以创建一个触发器来在每次插入时检查这些员工。

OP 要求 the best possible way to do this,而我从未遇到过其中最佳解决方案涉及手动键入数据的过程。

将您的列表导入馆藏 table。使用 table 查找和更新受影响的记录。存档列表,每条记录上都有一个日期戳,表明它们的处理时间。

这使用 SQL 服务器语法,但没有什么特别的。易于翻译成不同的方言。

CREATE TABLE dbo.DailyTerminations (
  EnterpriseUserID INT
  );

BEGIN TRANSACTION --By using a transaction, both tables will update or neither will.  
                  --For MySQL, it's START TRANSACTION

  UPDATE eu
    SET IsActive = 0
  FROM 
    dbo.EnterpriseUser as eu
  JOIN
    dbo.DailyTerminations as dt
      ON dt.EnterpriseUserID = eu.EnterpriseUserID
  WHERE 
    eu.IsActive <> 0;

  UPDATE st
    SET IsActive = 0
  FROM 
    dbo.Staff as st
  JOIN 
    dbo.EnterpriseUser as eu
      ON
        eu.EnterpriseUserID = st.StaffID
  JOIN
    dbo.DailyTerminations as dt
      ON dt.EnterpriseUserID = eu.EnterpriseUserID
  WHERE 
    IsActive <> 0;

COMMIT TRANSACTION --For MySQL, it's just COMMIT

INSERT INTO dbo.TerminationArchive
(
 EnterpriseUserID,
 ProcessedDate
)
SELECT
  EnterpriseUserID,
  GETDATE()
FROM
  dbo.DailyTerminations;

TRUNCATE TABLE 
  dbo.DailyTerminations;