1

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

我有大约 25 个具有相同表结构的数据库。我需要使用phpMyAdminStatus使用单个查询更新所有数据库中为特定 url命名的字段。

现在我正在使用这个查询。(我需要status=2table1所有这些数据库中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'

请帮我解决这个问题。

4

1 回答 1

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) where (p2.url=p3.url)=> FALSE 对于所有不匹配的,然后我们最终得到p1.url=FALSE

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

所以p1.url=p2.url=p3.url是一样的NOT p2.url=p3.url

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

于 2012-08-08T11:54:29.483 回答