使用mysql中的单个查询更新所有表中的值

时间:2012-08-08 11:44:56

标签: mysql

我想在MySql中使用单个查询更新多个列,其中某些条件在所有列中都有效。

我有大约25个数据库,其中包含相同的表结构。我需要使用 phpMyAdmin 使用单个查询在特定网址的所有数据库中更新名为Status的字段。

现在我正在使用此查询。 (我需要在status=2 table1 {/ 1}}所有这些数据库的url中设置'www.google.com'

UPDATE  `database1`.`table1` as p1,
    `database2`.`table1` as p2 ,
    `database3`.`table1` as p3
SET  p1.`STATUS` = 2,
    p2.`STATUS`= 2,
    p3.`STATUS`= 2 
WHERE p1.url='www.google.com' and
    p1.url=p2.url=p3.url

但它正在更新所有行中的数据url='www.google.com'。它也在status=2更新'www.yahoo.com'

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:5)

这就是你想要的:

UPDATE
    database1.table1 AS p1
    LEFT JOIN database2.table1 AS p2 USING (url)
    LEFT JOIN database3.table1 AS p3 USING (url)
SET
   p1.`STATUS` = 2,
   p2.`STATUS` = 2,
   p3.`STATUS` = 2
WHERE
    url = 'www.google.com';

并且由于p1.url=p2.url=p3.url而你没有工作 那被评估为p1.url=(p2.url=p3.url) 其中(p2.url=p3.url) =>所有不匹配的错误, 然后我们最终得到p1.url=FALSE

比较p1.url=FALSE =>将字符串与布尔值进行比较, 将字符串转换为整数为非数字字符串给出0, 并且将布尔值FALSE转换为整数也给出0,所以p1.url=FALSE

所以p1.url=p2.url=p3.urlNOT p2.url=p3.url

相同

所以你的代码会更新存在p2.url但不等于所有p3.urls的所有行