SQL查询从列表中搜索列表

时间:2018-07-11 11:43:11

标签: mysql sql qsqlquery qsqltablemodel

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

例如,如果我们得到一个具有123456234567的员工ID的列表,我想在EMPID字段中找到那些员工ID,然后更新其ACTIVE字段从“ 1”到“ 0”。

执行此操作的最佳方法是什么?

编辑,对于所有丢失的信息感到抱歉,因为我是论坛和编码界的新手,我将重新解释我要完成的工作。也许有功能吗?我更改了以下数据,以使其与示例相比更加一致。

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

  1. dbo.EnterpriseUser表上,我们需要代码来查找IVRID(这是员工的ID),然后从以下位置更新IsActive字段来查找用户: 10,然后使用相同格式将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也必须为应用程序正确更新。我唯一的问题是要找到要更新的记录,我必须使用EnterpriseUserID表中dbo.EnterpriseUser字段中的StaffID中的dbo.Staff字段。

在该行上,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);

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

OP要求提供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; ,但我从未遇到过最佳解决方案涉及手动键入数据的过程。

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

这使用SQL Server语法,但是没有任何幻想。易于翻译成其他方言。

{{1}}