如果在更新语句mysql上存在

如果在更新语句mysql上存在,mysql,Mysql,我有下一个问题: UPDATE a, b, c SET a.deleted=1, b.deleted=1, c.deleted=1 WHERE a.id='$aID' AND a.com='$comID' AND b.areID=a.id AND c.areID=a.id 问题是,有时c.areID不存在,b.areID也不存在,因此,MySQL中是否存在类似的句子生命?我假设“不存在”意味着它可以为空 UPDATE a, b, c SET a.deleted=1, b.deleted=1,

我有下一个问题:

UPDATE a, b, c SET a.deleted=1, b.deleted=1, c.deleted=1 
WHERE a.id='$aID' AND a.com='$comID' AND b.areID=a.id AND c.areID=a.id
问题是,有时c.areID不存在,b.areID也不存在,因此,MySQL中是否存在类似的句子生命?

我假设“不存在”意味着它可以为空

UPDATE a, b, c SET a.deleted=1, b.deleted=1, c.deleted=1 
WHERE a.com='$comID' AND a.id='$aID' AND (b.areID=a.id OR b.areID IS NULL) 
AND (c.areID=a.id or c.areID IS NULL)

如果您不想使用空值更新,那么您的查询应该是正常的,因为当areID为空时,它与条件不匹配。

看起来您想设置
a
deleted
列,以及
b
c
中任何对应(子)行的
deleted

为此,您可以执行以下操作:

UPDATE a
  LEFT JOIN b ON b.areID=a.id
  LEFT JOIN c ON c.areID=a.id
   SET a.deleted=1
     , b.deleted=1
     , c.deleted=1
 WHERE a.id='$aID'
   AND a.com='$comID'
原始语句中的逗号连接运算符等效于“内部连接”。当
b
c
中不存在子行时,原始语句不会更新任何行


通过使用外部联接,语句可以从
a
更新行,即使
b
和/或
c
中不存在子行,以及更新
b
c

中相应的子行时,不存在的值为空值。据我所知,在
UPDATE
语句中没有
左连接这样的东西:)