sql-server - 用更新声明回答我
问题描述
我有 101 条记录。前缀是一列。[保险电话] 就像 589-652-5256 我错误地做了
Substring ( EE.[Insurance Phone],4,3)
结果为 -65,我希望它为 652 所以我正在为此编写更新语句。对于 101 条记录,我有不同的电话号码。当我执行一个选择语句时,我得到了每一行中间的 3 个数字,但是如果我使用更新语句,那么 625 [101 条记录的第一条记录] 号将更新为所有 101 条记录。下面是 select 和 update 语句。
select
IC.COMPANY_NAME, EE.[Insurance Name],
substring (EE.[Insurance Phone], 5, 3) as phone
from
Insurance_Companies_28012020 EE
join
INS_COMPANIES IC on EE.[Insurance Name] = IC.COMPANY_NAME
where
ic.IS_ACTIVE = 1
and [Insurance Phone] is not null
update BUSINESS_PHONE_NUMBERS
set PREFIX = substring(EE.[Insurance Phone], 5, 3)
from Insurance_Companies_28012020 EE
join INS_COMPANIES IC on EE.[Insurance Name] = IC.COMPANY_NAME
where ic.IS_ACTIVE = 1 and [Insurance Phone] is not null
解决方案
我想您的查询应该如下所示:
update t1
set t1.PREFIX = substring(EE.[Insurance Phone], 5, 3)
from BUSINESS_PHONE_NUMBERS t1
inner join Insurance_Companies_28012020 EE on ee.KEY_COLUMN = t1.KEY_COLUMN -- here you should link these two tables
inner join INS_COMPANIES IC on EE.[Insurance Name] = IC.COMPANY_NAME
where ic.IS_ACTIVE = 1
and [Insurance Phone] is not null
编辑:
您的 update 语句没有链接表BUSINESS_PHONE_NUMBERS
和Insurance_Companies_28012020
,这会在执行计划中产生笛卡尔积,从而导致最终更新结果的奇怪行为。您会遇到这种情况:您需要更新 N 行,但您有 N*M 行以及所有可能的组合。很难说会选择其中哪一个来更新。在您的情况下,它是Insurance_Companies_28012020
表中的第一条记录。
此外,在您的UPDATE
语句中,您可以将条件添加到WHERE
子句:BUSINESS_PHONE_NUMBERS.KEY_COLUMN = EE.KEY_COLUMN
。这应该给出与我的UPDATE
.
推荐阅读
- html - 更改 CSS 中的背景颜色(现场明暗主题)
- r - 运行 lm 时“找不到对象”
- javascript - 如何检查 div 是否包含 JavaScript 中的图像元素?(不像背景图片,像包含的元素)
- ios - 如何将 UIImageView 放在导航栏上
- angular - valueChanges上的Angular 7 FormControl获取旧值
- javascript - 如何获取json对象标题
- python - pyOpenSSL:连接的协议版本错误
- javascript - 将数据从javascript发送到php以生成pdf但不起作用
- matlab - 如何创建一个简单的图像测试
- java - 如何处理嵌套的静态转换?