mysql—sql查询;从列表中搜索列表

jdzmm42g  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(352)

我是sql新手,包括执行查询。我们的组织每天都会以列表的形式发送一份被解雇员工的名单。我要做的是两件事,在一个 column 如果找到了该员工,则将某个单元格/字段更新为 disable .
例如,如果我们得到一个雇员id为 123456 以及 234567 ,我想在 EMPID 字段,然后将其活动字段从“1”更新为“0”。
最好的方法是什么?
编辑,为所有丢失的信息感到抱歉,因为我是一个全新的论坛和编码世界,我,将重新解释我试图完成什么。也许是个函数?我修改了下面的数据,使之更符合我所使用的示例。
我们每天都会收到一个文本文件,上面有一个被终止的员工id列表,我们需要在应用程序中停用它。我知道这仍然是手动的,但我认为这是一个良好的开端,一些自动化。
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

); 插入enterpriseuser值(6,'robert','andrews',2,1,'2018-07-11 13:01:54.670000');
第二张table dbo.Staff 也必须为应用程序正确更新。我唯一的问题是要找到要更新的记录,我必须使用 EnterpriseUserID 字段自 dbo.EnterpriseUser 现在在 StaffID 场上的 dbo.Staff table。
在那一排 LastModDate 必须更改为当前日期 IsActive 必须从 10 .

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);
uoifb46i

uoifb46i1#

行动组要求 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;
sbtkgmzw

sbtkgmzw2#

您可以使用如下update语句:

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

jjjwad0x3#

如果要手动检查它们,可以使用update语句。
如果要在表中插入雇员,可以创建触发器,以便在每次插入时检查这些雇员。

相关问题