2013-04-04 37 views
2

我有一个查询:如果存在于更新句话的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中?

+0

不会存在是NULL值。 – 2013-04-04 05:00:32

+0

据我所知,在'UPDATE'语句里面没有'LEFT JOIN'这样的东西:) – 2013-04-04 05:02:15

回答

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值更新然后将查询应该是OK当areID为NULL,则它不匹配的情况。

+0

Thank you it works – 2013-04-04 05:28:14

1

它看起来像你想设置的a两个bcdeleted列,以及任何相应的(孩子)的deleted列行。

要accompish,你可以做这样的事情:

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”。当bc中不存在子行时,原始语句不会更新任何行。

通过使用外部联接,该语句可以从a更新行(S),即使子行不b和/或c存在,以及在b和和c更新了相应的子行。