我有几个员工的桌子。它们具有以下列empid,datecolumn1,is_valid。
很少有员工在表中有多个记录。如果员工在表中有多条记录,我希望在以下条件下“使其中一条记录无效”: 1.如果员工在表中有多个记录,则datecolumn1中没有值的记录有效(update is_valid为1),datecolumn1中值为value的记录无效(update is_valid为0)。
我如何做到这一点?
答案 0 :(得分:2)
正如Ben指出的那样,你已经声明如果datecolumn1
为NULL,你希望is_valid
列设置为0和1.假设你修复了这个问题,你可能需要调整这个CASE
声明取决于您决定的方式是正确的。
UPDATE employees
SET is_valid = (CASE WHEN datecolumn1 IS NULL
THEN 1
ELSE 0
END)
WHERE empid IN (SELECT e.empid
FROM employees e
GROUP BY emempid
HAVING COUNT(*) > 1)
答案 1 :(得分:1)
创建一个临时表,并使用GROUP BY员工ID(或任何您的唯一标识符)通过原始表上的SELECT填充它。创建第二个临时表,并通过原始表上的SELECTING填充它,并排除与分组表中的行匹配的所有行。现在,您有一个只包含多行人的表。从原始表中,在所有与第二个登台表匹配员工ID的行上将is_valid设置为0,并且也没有datecolumn1(或者也许还有datecolumn1 - 在写这篇文章时你的问题有点不清楚。)和is_valid到1对其他人。完成后,删除临时表,您应该拥有所需的内容。
您也可以通过一个更复杂的多选调用来完成此操作,但我发现当事情变得复杂时使用登台表会很有帮助。