我有下一个查询:
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中存在任何句子生命或类似的东西吗?
答案 0 :(得分: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时,它与条件不匹配。
答案 1 :(得分:1)
您好像要设置deleted
的{{1}}列,以及a
和deleted
中任何相应(子)行的b
列{1}}。
为此,您可以这样做:
c
原始语句中的逗号连接运算符等效于“INNER JOIN”。当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
中的相应子行。