Сравнение результатов двух подзапросов - PullRequest
1 голос
/ 05 апреля 2011

Мне нужно импортировать данные из базы данных.Контакты связаны с компаниями двумя способами: через контактную информацию или через через "активность".Мне нужно получить несколько списков.

Список контактов без компаний достаточно прост:

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 - это идентификатор компании.
Tb_contact_soc - это таблица, которая связывается через контактную информацию [idcontact, идент, телефон, факс];tb_activite_soc_contact - это таблица, которая связывает через действия [idcontact, идент, 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_contact_soc не найдены в компаниях из таблицы tb_activite_soc_contact ".Но я не могу понять это.

Мне нужно получить его только один раз, чтобы наш клиент мог проверить данные, прежде чем мы начнем импорт, так что это может быть немного затруднительно (не слишком, спасибо;))

1 Ответ

2 голосов
/ 05 апреля 2011

Попробуйте это и предложение (я предполагаю, что вы используете 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
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...