【问题标题】:SQL Query table with multiple records with matching columns具有多条记录且列匹配的 SQL 查询表
【发布时间】:2016-06-14 11:06:40
【问题描述】:

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

谢谢

【问题讨论】:

  • 请用您正在使用的数据库标记您的问题。
  • 添加标签,使用 MS SQL Server 08R2

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


【解决方案1】:

您的语法看起来有点像 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,并且对应的手机号码的序列为1时,将电话序列更新为2。

【讨论】:

    猜你喜欢
    • 2017-10-18
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    相关资源
    最近更新 更多