Sql 使用子字符串识别记录并更新记录

Sql 使用子字符串识别记录并更新记录,sql,substring,Sql,Substring,我的销售代表通过客户邮政编码的前三位数字与其客户关联-这仅适用于美国客户。Profile_Zip表有两列Profile_Key表示代表,三位数字表示邮政编码的前三位 Profile_Key Three_Digits 123456 610 123456 611 123456 612 Profile表中保存客户记录的两个字段是Zip(邮政编码)和一个关联字段,用于保存销售代表的Profile_密钥 我需要运行一个查

我的销售代表通过客户邮政编码的前三位数字与其客户关联-这仅适用于美国客户。Profile_Zip表有两列Profile_Key表示代表,三位数字表示邮政编码的前三位

 Profile_Key      Three_Digits
 123456            610
 123456            611
 123456            612
Profile表中保存客户记录的两个字段是Zip(邮政编码)和一个关联字段,用于保存销售代表的Profile_密钥

我需要运行一个查询,用profile_Zip表中代表的profile密钥更新客户的关联密钥。这就是我一直在做的

 update profile set association_key = 
 (select profile_key from profile_zip where three_digits = 
 (Select substring(zip, 1, 3) as ZipPrefix
 From profile group by profile.zip))
我知道为什么会出现这个错误,我不知道如何使查询工作,或者子字符串是否是正确/最佳的选择

子查询返回了多个值。当子查询在=、!=、=或者当使用子查询时 作为一种表达

还有别的办法吗? 谢谢

配置文件表。 John Doe是代表(profile_type=4),Mary是客户(profile_type=6)。 John的个人资料密钥在Mary的Association密钥字段中,这就是绑定他们的原因。当然,记录中还有更多字段(地址、电话等)

错误

子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时。

当您需要在中使用
时,指示您正在使用
=
。当使用
=
时,系统仅期望1个结果

特别是,我猜:

Select substring(zip, 1, 3) as ZipPrefix
From profile
group by profile.zip

返回大量子字符串。在子查询之外的子查询中使用

我认为这就是您试图在那里做的:

UPDATE P
SET Association_Key = PZ.Profile_Key
FROM [Profile] P
INNER JOIN Profile_Zip PZ
    ON PZ.Three_Digits = SUBSTRING(P.Zip, 1, 3)

问题是您试图将标量值设置为结果集。在这种情况下,您需要更新结果集,然后使用正确的标量值。

不,您错了。不是那样的。作者,请发布所有相关表的结构,就像您为Profile_Zipc所做的一样。您可以共享有关表结构和数据的其他信息吗?
UPDATE P
SET Association_Key = PZ.Profile_Key
FROM [Profile] P
INNER JOIN Profile_Zip PZ
    ON PZ.Three_Digits = SUBSTRING(P.Zip, 1, 3)