根据另一个表中的条件更新表中的多个行

时间:2014-05-04 19:55:19

标签: mysql sql-update multi-table

只是演示。我有两张桌子

Table a (id, name)
--id---name----
  1    John
  2    Jack
  3    Maria
  4    Bill
Table b (id, empid, datewrk)
--id---empid----datewrk----
  1      1    2012-12-12
  2      2    2012-12-14
  3      3    2012-12-16
  4      4    2012-12-17

我想在表a中更新所有name = null,表b中的日期< ='2012-12-14',结果是

--id---name--
  1   NULL
  2   NULL

我尝试过代码但没有工作(仅适用于SELECT语句)。我在MySql Workbench和SQL Server 2012中尝试

UPDATE a
SET name = NUll
WHERE id IN (SELECT a.id FROM a 
JOIN b ON a.id = b.empid 
WHERE b.datewrk <= '2012-12-14');

感谢。

2 个答案:

答案 0 :(得分:0)

您的更新声明应该有效,但为了进行比较,您必须将'2012-12-14'转换为日期。

UPDATE a
SET name = NULL
WHERE id IN (
   SELECT empid FROM b 
   WHERE datewrk <= STR_TO_DATE('2012-12-14', '%Y-%m-%d'));

请注意,在子查询中,您不需要表A

希望这有帮助。

答案 1 :(得分:0)

对于mysql

UPDATE a 
JOIN b ON a.id = b.empid 
SET a.name = NUll
WHERE b.datewrk <= '2012-12-14';

您不需要子查询只需将表put set子句加入正确的where where子句

Fiddle Demo