SQL:根据列更新唯一的行

时间:2016-07-15 15:28:05

标签: sql-server

我有一张表格可以将联系人与公司联系起来。当添加多个联系人时,可以选择设置"主要"或者"中学"联系。然而,当人们添加联系人时,他们还没有使用此功能。该程序已被修改,因此它会自动将添加到公司的第一个联系人标记为主要联系人,但不会修复已输入的数据。

我想轮询该表,并说每个CompanyID只有一条记录,将PrimaryContact设置为true,但我无法弄清楚如何执行此操作。对于任何分配了多个联系人的公司,我不想做任何事情。例如:

CompanyID   ContactID   PrimaryContact
1           285         0
2           375         0
3           761         0
4           1744        0
4           2301        0
6           335         0
6           4987        0
9           809         0
9           2119        0
10          99          0
11          99          0

在上面的示例中,CompanyID 4,6和9有多个条目,因此我不想触摸它们。但是1,2,3,10和11有单个条目,所以我想将这些行的PrimaryContact设置为1。

如何做到这一点?

1 个答案:

答案 0 :(得分:2)

您希望MS SQL Server使用的语法是:

update contacts
set PrimaryContact = 1
where CompanyID in (
    select CompanyID
    from contacts
    group by CompanyID
    having count(distinct ContactID) = 1
)

此问题之前被标记为MySQL,下面的原始答案适用于此。

<击> 这是一种方法:

update contacts as c
inner join 
(
    select CompanyID
    from contacts
    group by CompanyID
    having count(distinct ContactID) = 1
) t on c.CompanyID= t.CompanyID
set PrimaryContact = 1;

在派生表中,您可以找到具有一个ContactID的CompanyID。然后,该查询的结果将与应更新的表连接。

<击> Sample SQL Fiddle