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



我是SQL的新手,包括执行查询。每天,我们的组织都会以列表形式发送一份被解雇的员工名单。我想做的是两件事,在column中搜索员工ID,如果找到了员工,则将某个单元格/字段更新为disable

例如,如果我们得到一个员工ID为123456234567的列表,我想在EMPID字段中找到这些员工ID,然后将其ACTIVE字段从"1"更新为"0"。

最好的方法是什么?

编辑,很抱歉所有遗漏的信息,因为我对论坛和编码世界完全陌生,我将重新解释我正在努力实现的目标。也许是函数?我更改了下面的数据,以使其与我正在使用的示例更加一致。

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

  1. dbo.EnterpriseUser表上,我们需要通过查找IVRID(这是员工的ID(来找到用户的代码,然后将IsActive字段从1更新为0,然后使用相同的格式将LastModDate更新为当前日期和时间。下面是我正在使用的示例表,如果格式不正确,很抱歉。

    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. 第二个表dbo.Staff也必须针对应用程序进行适当的更新。我唯一的问题是,要找到要更新的记录,我必须使用dbo.EnterpriseUser中的EnterpriseUserID字段,该字段现在位于dbo.Staff表的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)

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

将您的列表导入到保留表中。使用该表查找和更新受影响的记录。将列表存档,每条记录上都有一个日期戳,指示处理时间。

这使用了SQL Server语法,但没有什么奇怪的地方。很容易翻译成不同的方言。

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;

如果要手动检查,可以使用update语句。

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

相关内容

  • 没有找到相关文章

最新更新