Mysql 特定属性的SQL更新,连接表

Mysql 特定属性的SQL更新,连接表,mysql,sql,Mysql,Sql,我是SQL新手,我正在尝试学习更新,它从 更新您希望在哪个位置进行更新(表) 设置要更新的属性 其中在哪一行进行更新 我的问题是,我想为所有客户更新属性上的状态,这些客户的邮政编码以某个值开头,该值存储在另一个名为address的表中 到目前为止,我有这个 UPDATE customer Set active = false WHERE postal_code LIKE "99%" INNER JOIN address ON customer_id=address.addre

我是SQL新手,我正在尝试学习更新,它从

更新您希望在哪个位置进行更新(表)

设置要更新的属性

其中在哪一行进行更新

我的问题是,我想为所有客户更新属性上的状态,这些客户的邮政编码以某个值开头,该值存储在另一个名为address的表中

到目前为止,我有这个

UPDATE customer
Set active = false
WHERE postal_code LIKE "99%"
INNER JOIN address ON customer_id=address.address.id
因此,我有两个表,其中一个表保存客户的所有信息,另一个表保存他们地址的所有信息,它们之间的关系是address.id,但我被卡住了,因为我无法使连接识别哪些地址以该值开始,以将属性“active”更新为false


请帮助

假设您的桌子看起来像(因为您没有告诉我们):

例如: 客户(客户id、地址id)

地址(地址id、邮政编码id)

邮政编码(邮政编码id,邮政编码,活动)

我认为您需要对联接表进行更新:

UPDATE SET T1.active = false
from
postal_code T1 INNER JOIN
adress T2 on T2.postal_code_id = T1.postal_cod_id INNER JOIN
customer T3 on T3.adress_id = T2.adress_id
WHERE
T1.posta_cod LIKE '99%'
试试这个:

UPDATE c
 Set c.active = false
  FROM customer c
  INNER JOIN address a ON c.addressId=a.id
 WHERE a.postal_code LIKE "99%"
要开始此过程,请暂时忽略更新,是否可以编写一个SELECT语句来返回要更改的行

您最初的尝试可能有缺陷,因为您将地址表的主键加入到客户表的PK中,除非您的架构具有这两个表的1:1关系,否则很可能外键是另一列,并且您必须使用它来加入。在您的情况下,这可能类似于客户Id

尝试使用如下查询生成记录:

SELECT Customer.Id as [CustomerId], Customer.Active, Address.Id as [AddressId]
FROM Customer
INNER JOIN Address ON Address.Customer_Id = Customer.Id
WHERE Address.postal_code LIKE '99%'
检查返回的行,更新将影响所有这些行

一旦您验证了要影响的字段可以返回,那么我们就可以将其转换为更新

…假设前面的SQL语句是正确的

请注意,
FROM
JOIN
WHERE
子句仍然相同,我们只是用
UPDATE
SET
替换了
SELECT
子句


通过先执行
SELECT
来预览预期的更改甚至是一个好习惯。

请提供示例数据、期望的结果和逻辑的清晰解释。您就快到了,try harder此语法对MySQL无效。请提供两个表
customer
address
的架构描述。我认为您实际上是在尝试更新
address
表上的'Active'字段,而不是
customer
表。在连接两个(或更多)表时,最好使用表名限定所有列名。e、 g.
在customer.customer\u id=address.customer\u id SET customer.active=false WHERE address.postal\u code(如“99%”上更新客户内部加入地址)
UPDATE Customer
SET Active = 1
FROM Customer
INNER JOIN Address ON Address.Customer_Id = Customer.Id
WHERE Address.postal_code LIKE '99%'