SQL查询;从列表中搜索列表
SQL Query; Search List from List
我是 SQL 的新人,包括执行查询。每天,我们的组织都会发送一份以列出格式终止的员工名单。我要做的是两件事,在 column
中搜索员工 ID,如果找到该员工,则将某个 cell/field 更新为 disable
。
例如,如果我们得到一个员工 ID 为 123456
和 234567
的列表,我想在 EMPID
字段中找到这些员工 ID,然后更新他们的从“1”到“0”的活动字段。
最好的方法是什么?
编辑,对于所有遗漏的信息,我深表歉意,因为我对论坛和编码世界是全新的,而且我将重新解释我正在努力完成的事情。也许是一个功能?我更改了下面的数据,使其与我正在处理的数据和示例更加一致。
我们每天都会收到一个文本文件,其中包含已终止的员工 ID 列表,我们需要在我们的应用程序中停用这些 ID。我知道这仍然是手动的,但我认为这是一些自动化的良好开端。
在dbo.EnterpriseUser
table上,我们需要代码通过查找IVRID
(也就是员工的ID)来找到用户,然后更新IsActive
字段从 1
到 0
,然后使用相同的格式将 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');
第二个 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;
我是 SQL 的新人,包括执行查询。每天,我们的组织都会发送一份以列出格式终止的员工名单。我要做的是两件事,在 column
中搜索员工 ID,如果找到该员工,则将某个 cell/field 更新为 disable
。
例如,如果我们得到一个员工 ID 为 123456
和 234567
的列表,我想在 EMPID
字段中找到这些员工 ID,然后更新他们的从“1”到“0”的活动字段。
最好的方法是什么?
编辑,对于所有遗漏的信息,我深表歉意,因为我对论坛和编码世界是全新的,而且我将重新解释我正在努力完成的事情。也许是一个功能?我更改了下面的数据,使其与我正在处理的数据和示例更加一致。
我们每天都会收到一个文本文件,其中包含已终止的员工 ID 列表,我们需要在我们的应用程序中停用这些 ID。我知道这仍然是手动的,但我认为这是一些自动化的良好开端。
在
dbo.EnterpriseUser
table上,我们需要代码通过查找IVRID
(也就是员工的ID)来找到用户,然后更新IsActive
字段从1
到0
,然后使用相同的格式将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');
第二个 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;