2

我有下一个查询:

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 中是否有任何句子生命或类似的东西?

4

2 回答 2

1

我假设“不存在”是指它可以为 NULL。

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)

如果您不想使用 NULL 值进行更新,那么您的查询应该没问题,因为当 areID 为 NULL 时,它与条件不匹配。

于 2013-04-04T05:02:22.293 回答
1

看起来您想要设置 的deleteda以及 和deleted中任何相应(子)行的bc

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

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'

原始语句中的逗号连接运算符等价于“INNER JOIN”。b当或中不存在子行时c,原始语句不会更新任何行。

通过使用外连接,即使在和/或a中不存在子行时,该语句也可以更新行,以及更新和/或中的相应子行。bcbc

于 2013-04-04T05:23:26.993 回答