我有下一个查询:
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.id='$aID' AND a.com='$comID' AND b.areID=a.id AND c.areID=a.id
问题是有时 c.areID 不会存在,b.areID 也一样,所以,如果存在的话,MySQL 中是否有任何句子生命或类似的东西?
我假设“不存在”是指它可以为 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 时,它与条件不匹配。
看起来您想要设置 的deleted
列a
以及 和deleted
中任何相应(子)行的b
列c
。
为此,您可以执行以下操作:
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
中不存在子行时,该语句也可以更新行,以及更新和/或中的相应子行。b
c
b
c