我想在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'
。
请帮我解决这个问题。
答案 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.url
与NOT p2.url=p3.url
所以你的代码会更新存在p2.url但不等于所有p3.urls的所有行