SQL查询表,其中包含多个匹配列

时间:2016-06-13 22:47:06

标签: sql sql-server sql-server-2008

我有一个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)

谢谢

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的相应手机号码。