多个存在的地方
Multiple where exists
我需要根据以下条件将 table_work 中的 value_check 列更新为 N
更新 value_check 为 N
- if employee_id in table_work 没有 employee_manager_id 记录
(blank/null 或根本没有记录)在 employees_contact table
当 getdate 在 contact_eff_dt 和 contact_end_dt 之间时(加入
使用 employee_id)
- 如果 employee_id 在 table_work 中有记录
employees_contact table 但 employee_manager_id work_location_state
不是 NJ 或 NY 或 ME ..mgr_work_location table 有
employee_manager_id 和 work_location_state 列。
我可以用 2 个更新语句来完成,有没有一种只使用一个更新语句的简单方法?也许使用多个 where exists 条件?
以下是我现在使用的 2 个更新:
更新 1
Update work
set work.value_check = 'N'
From table_work work
Where wotk.value_check = 'Y'
And not exists (select employee_manager_id
from employees_contact contact
Where contact.employee_id = work.employee_id
And getdate() between contact.eff_dt and contact.end_dt)
更新 2
Update work
set work.value_check = 'N'
From table_work work
Join employees_contact contact On contact.employee_id= work.employee_id
Join mgr_work_location mgr On mgr.mgr_id = contact.employee_manager_id
Where work.value_check = 'Y'
And getdate() between contact.eff_dt
and contact.end_dt And mgr.work_location_state not in ('NJ','NY,'ME')
第一个查询的 NOT EXISTS
条件可能可以通过 LEFT JOIN
在第二个查询中模拟,并检查 contact.employee_id IS NULL
(不匹配的)
contact.eff_dt 上的限制可以从 WHERE
移动到 mgr_work_location 上的 LEFT JOIN
。
rextester 测试 here
UPDATE work
SET work.value_check = 'N'
FROM table_work work
LEFT JOIN employees_contact contact
ON contact.employee_id = work.employee_id
AND contact.eff_dt <= getdate()
AND contact.end_dt >= getdate()
LEFT JOIN mgr_work_location mgr
ON mgr.mgr_id = contact.employee_manager_id
WHERE work.value_check = 'Y'
AND (contact.employee_id IS NULL
OR mgr.work_location_state NOT IN ('NJ','NY','ME'))
我需要根据以下条件将 table_work 中的 value_check 列更新为 N
更新 value_check 为 N
- if employee_id in table_work 没有 employee_manager_id 记录 (blank/null 或根本没有记录)在 employees_contact table 当 getdate 在 contact_eff_dt 和 contact_end_dt 之间时(加入 使用 employee_id)
- 如果 employee_id 在 table_work 中有记录 employees_contact table 但 employee_manager_id work_location_state 不是 NJ 或 NY 或 ME ..mgr_work_location table 有 employee_manager_id 和 work_location_state 列。
我可以用 2 个更新语句来完成,有没有一种只使用一个更新语句的简单方法?也许使用多个 where exists 条件?
以下是我现在使用的 2 个更新:
更新 1
Update work
set work.value_check = 'N'
From table_work work
Where wotk.value_check = 'Y'
And not exists (select employee_manager_id
from employees_contact contact
Where contact.employee_id = work.employee_id
And getdate() between contact.eff_dt and contact.end_dt)
更新 2
Update work
set work.value_check = 'N'
From table_work work
Join employees_contact contact On contact.employee_id= work.employee_id
Join mgr_work_location mgr On mgr.mgr_id = contact.employee_manager_id
Where work.value_check = 'Y'
And getdate() between contact.eff_dt
and contact.end_dt And mgr.work_location_state not in ('NJ','NY,'ME')
第一个查询的 NOT EXISTS
条件可能可以通过 LEFT JOIN
在第二个查询中模拟,并检查 contact.employee_id IS NULL
(不匹配的)
contact.eff_dt 上的限制可以从 WHERE
移动到 mgr_work_location 上的 LEFT JOIN
。
rextester 测试 here
UPDATE work
SET work.value_check = 'N'
FROM table_work work
LEFT JOIN employees_contact contact
ON contact.employee_id = work.employee_id
AND contact.eff_dt <= getdate()
AND contact.end_dt >= getdate()
LEFT JOIN mgr_work_location mgr
ON mgr.mgr_id = contact.employee_manager_id
WHERE work.value_check = 'Y'
AND (contact.employee_id IS NULL
OR mgr.work_location_state NOT IN ('NJ','NY','ME'))