首页 > 解决方案 > SELECT 从两个表中获取结果,其中一个值仅在表列中出现一次

问题描述

抱歉,我知道这应该相对简单,并且可能以前已经回答过,但我自己被屏蔽了,在这里找不到匹配的帖子。

我有两张表公司和联系人。一个联系人可以关联到 0 个或 1 个公司,一个公司可以有 1 个或多个联系人,并且可以将一个设置为“主要联系人”

公司(ccyID、ccyname、primconID)

________________________________________________
|  ccyID      |  ccyname      |  PrimconID    |
------------------------------------------------
|  aaaaaaa    |  Company A    |    NULL       |
|  bbbbbbb    |  Company B    |    NULL       |
|  ccccccc    |  Company C    |   vvvvvvv     |
________________________________________________

联系人(conID,名字,姓氏,ccyID)

__________________________________________________
|  conID    | first     | last      | companyID |
--------------------------------------------------
|  zzzzzzz  |  Stand    |   Alone   |   NULL    |
|  yyyyyyy  |  Only     |   Contact |  aaaaaaa  |
|  xxxxxxx  |  CompanyB |   First   |  bbbbbbb  |
|  wwwwwww  |  CompanyB |   Second  |  bbbbbbb  |
|  vvvvvvv  |  CompanyC |   Only    |  ccccccc  |
_________________________________________________

我需要一个 SELECT ,当公司只有一个联系人时,它将返回 companyID 和 contactID,并且没有设置 PrimconID 即我想要返回的上述数据

conID   ccyID
----------------
yyyyyyy aaaaaaa

(最终的想法是我将更新表格以使公司的单独联系人成为主要联系人)

标签: sqlsql-serverselect

解决方案


按公司对联系人进行分组,以仅保留计数为 1 的联系人,并确保他们在没有主要联系人的公司集中:

select companyid, max(conid)
from contacts
group by companyid
having count(*) = 1
and companyid in (select ccyid from companies where primconid is null)
order by companyid;

推荐阅读