我有一个SQL数据库,其中包含一个包含几个字段的电话号码记录的表
PersonGUID (Fk, uniqueidentifier)
PhoneSequence (int)
PhoneTypeCode (Fk)
AreaCode
PhoneNumber
PhoneGUID (Pk, uniqueidentifier)
每个PersonGUID都有多条记录是正常的,但导入电话号码记录的批量列表时出错,PhoneSequence
为同一PersonGUID
设置为1 } 记录。这些人有多个记录,其中PhoneTypeCode='Mobile'
和PhoneTypeCode='Home'
都标有PhoneSequence=1
,因此系统会假设他们有两个主要电话号码。
我想创建一个查询,在桌面上搜索有多条记录的人,但无法弄清楚如何说“找到同时拥有家庭和手机以及两个记录的人”。序列是1"
我不可避免地要更新家庭电话记录(对于同时拥有这两者的用户),所以序列为2。
这是我能够找到的最接近的:
update tPersonPhone
set PhoneSequence = 2
from tPersonPhone pp
where PhoneTypeCode ='home' and
exists (select * from PersonPhone pp1
where pp.PersonPhoneGUID = pp1.PersonPhoneGUID
and PhoneTypeCode in ('home','mobile')
and PhoneSequence = 1)
谢谢
答案 0 :(得分:0)
您的语法看起来有点像SQL Server。如果是这样,你想要这样的东西:
update pp
set PhoneSequence = 2
from tPersonPhone pp
where pp.PhoneTypeCode = 'home' and pp.PhoneSequence = 1 and
exists (select 1
from tPersonPhone pp2
where pp2.PersonPhoneGUID = pp1.PersonPhoneGUID and
pp2.PhoneTypeCode = 'mobile' and
pp2.PhoneSequence = 1
);
大多数其他数据库都有类似的语法。基本逻辑是:当一个家庭号码的序列为1时,将电话序列更新为2,并且有一个序列为1的相应手机号码。