比较两个子查询的结果

时间:2011-04-05 12:34:27

标签: tsql subquery

我需要从数据库导入数据。联系人以两种方式链接到公司:通过联系信息,或通过“活动”。我需要一些清单。

没有公司的联系人列表很容易:

where idcontact not in (select idcontact from tb_contact_soc where idcontact is not null)
and idcontact not in (select idcontact from tb_activite_soc_contact where idcontact is not null)

与多家公司的联系人列表更加棘手 idcontact是联系人的id; ident是公司的身份。
Tb_contact_soc是通过联系信息链接的表[idcontact,ident,telephone,fax]; tb_activite_soc_contact是通过活动链接的表[idcontact,ident,activityCode]。

where
(
    -- contacts linked via their contact informations
    idcontact in (
        select idcontact
        from tb_contact_soc
        where idcontact is not null and ident is not null
        group by idcontact
        having count(*) > 1
    )
    -- contacts linked via an activity
    or idcontact in (
        select idcontact
        from tb_activite_soc_contact
        where idcontact is not null and ident is not null
        group by idcontact
        having count(*) > 1
    )
) and (
    -- here goes the snipplet I can't figure out
)

在最后一个“和”中,我需要说一下“对于这个联系人来说,在tb_activite_soc_contact表的公司中找不到tb_contact_soc表中的至少一个公司”。但我无法理解。

我只需要一次,所以我们的客户可以在我们启动导入之前验证数据,所以它可能有点令人沮丧(不要太多,谢谢;)

1 个答案:

答案 0 :(得分:2)

试试这个和子句(我假设你使用的是SQL 2005或更高版本):

AND EXISTS
(
    SELECT ident
        FROM tb_contact_soc a
     WHERE a.idcontact = <PARENT_QUERY_TABLE_ALIAS>.idcontact
       AND a.ident IS NOT NULL
    EXCEPT
    SELECT ident         
        FROM tb_activite_soc_contact a
     WHERE a.idcontact = <PARENT_QUERY_TABLE_ALIAS>.idcontact
       AND ident IS NOT NULL
)