2012-03-11 57 views
1

我试图用相同的值 - 预订(tbl) - dropOffLocation和汽车(tbl) - currentbranch更新2个表中的字段。加入更新声明

我可以得到2条update语句所期望的结果,如下面的:

UPDATE bookings b SET b.dropOffLocation = 'London' WHERE b.regNumber = 'AX03PFF' 
UPDATE cars c SET c.currentBranch = 'London' WHERE c.regNumber = 'AX03PFF' 

不过,我想使用连接到2个更新语句合二为一。 我试过下面的sql,但它没有做任何事情。

UPDATE 
    bookings b JOIN cars c 
SET 
    b.dropOffLocation = 'London' 
    AND c.currentBranch = 'London' 
WHERE b.regNumber = 'EP59YMP' AND c.regNumber = 'EP59YMP' 

有人可以帮助我修改联接声明以使其工作。

谢谢!

+0

看到这个问题 - http://stackoverflow.com/questions/4641970/how-do-i-combine-two-update-statements-in -one-mysql-query – Jody 2012-03-11 13:41:32

+0

通过说_isn't做任何事情_,以及PHP标记,我们怀疑你没有错误检查你的查询执行。如果使用'mysql_query()',请在查询失败时'回显mysql_error()'以查看错误。 – 2012-03-11 14:01:38

回答

3

您的语法有点不合适。在UPDATE SET子句内使用,代替AND。我没有将这两个表都放到WHERE子句中,而是在JOIN中添加了一个等效的ON子句,它更直观,可以直接声明表之间的关系。

UPDATE 
    bookings b JOIN cars c ON b.regNumber = c.regNumber 
SET 
    b.dropOffLocation = 'London', 
    c.currentBranch = 'London' 
WHERE b.regNumber = 'EP59YMP' 
+0

+1。但我认为更大的问题是,OP似乎没有检查SQL错误,因此语句无效的SQL语句“没有做任何事情”。 – ruakh 2012-03-11 13:41:57

+0

@rukah很可能。 – 2012-03-11 14:00:23

+0

非常感谢,它现在正在工作 – Rob 2012-03-11 14:24:28

0
UPDATE 
bookings b JOIN cars c 
on b.regNumber = c.regNumber 

SET 
b.dropOffLocation = 'London', 
AND c.currentBranch = 'London', 

WHERE b.regNumber = 'EP59YMP' AND c.regNumber = 'EP59YMP'; 
0

试试这个:

UPDATE FROM bookings AS b 
LEFT JOIN cars AS c ON c.regNumber = b.regNumber 
SET b.dropOffLocation = 'London' AND c.currentBranch = 'London' 
WHERE b.regNumber = 'EP59YMP'