我需要从数据库导入数据。联系人以两种方式链接到公司:通过联系信息,或通过“活动”。我需要一些清单。
没有公司的联系人列表很容易:
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表中的至少一个公司”。但我无法理解。
我只需要一次,所以我们的客户可以在我们启动导入之前验证数据,所以它可能有点令人沮丧(不要太多,谢谢;)
答案 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
)