Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос сравнивающий две таблицы по двум столбцам  [new]
Roust_m
Member

Откуда: Сидней
Сообщений: 1049
Добрый день,

Есть такой запрос:

select ai.*, sai.*
from table1 ai
join table2 sai
on (ai.sid = sai.sid and ai.pkey = sai.pkey  and ai.node_id = sai.node_id  )
and (ai.ItemValue <> sai.value or ai.temComment <> sai.comment)


Если из него убрать последнюю строчку, то он возвращает 31 запись. Если оставить, то ничего, хотя 6 записей различаются по столбцам ItemValue /value и temComment /comment.

Подскажите пжлста, что я делаю не так? Мне нужно получить эти шесть записей, которые различаются по любому из этих столбцов.

Спасибо.
3 окт 19, 08:09    [21985525]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сравнивающий две таблицы по двум столбцам  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29246
Roust_m
Если оставить, то ничего, хотя 6 записей различаются по столбцам ItemValue /value и temComment /comment.
Может, там NULL в значениях?
3 окт 19, 08:43    [21985534]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сравнивающий две таблицы по двум столбцам  [new]
Roust_m
Member

Откуда: Сидней
Сообщений: 1049
alexeyvg
Roust_m
Если оставить, то ничего, хотя 6 записей различаются по столбцам ItemValue /value и temComment /comment.
Может, там NULL в значениях?


Да, там полно NULL. Те записи, которые отличаются, они в одной из таблиц не NULL
3 окт 19, 09:01    [21985540]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сравнивающий две таблицы по двум столбцам  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29246
Roust_m
alexeyvg
пропущено...
Может, там NULL в значениях?


Да, там полно NULL. Те записи, которые отличаются, они в одной из таблиц не NULL
Тогда нужно либо строить огромные конструкции с is null, либо переделать условие на:
and (isnull(ai.ItemValue, 0) <> isnull(sai.value, 0) or isnull(ai.temComment, 0) <> isnull(sai.comment, 0))

Конечно, "0" нужно заменить на правильную константу
3 окт 19, 09:13    [21985548]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сравнивающий две таблицы по двум столбцам  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6612
Roust_m
Добрый день,

Есть такой запрос:

select ai.*, sai.*
from table1 ai
join table2 sai
on (ai.sid = sai.sid and ai.pkey = sai.pkey  and ai.node_id = sai.node_id  )
and (ai.ItemValue <> sai.value or ai.temComment <> sai.comment)


Если из него убрать последнюю строчку, то он возвращает 31 запись. Если оставить, то ничего, хотя 6 записей различаются по столбцам ItemValue /value и temComment /comment.

Подскажите пжлста, что я делаю не так? Мне нужно получить эти шесть записей, которые различаются по любому из этих столбцов.

Спасибо.


NOT EXISTS (SELECT ai.ItemValue INTERSECT SELECT sai.value)
AND
NOT EXISTS (SELECT ai.temComment INTERSECT SELECT sai.comment))
3 окт 19, 09:21    [21985552]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сравнивающий две таблицы по двум столбцам  [new]
invm
Member

Откуда: Москва
Сообщений: 8797
select ai.*, sai.*
from table1 ai
join table2 sai
on (ai.sid = sai.sid and ai.pkey = sai.pkey  and ai.node_id = sai.node_id  )
and not exists(select ai.ItemValue, ai.temComment intersect select sai.value, sai.comment)
3 окт 19, 09:23    [21985553]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сравнивающий две таблицы по двум столбцам  [new]
Roust_m
Member

Откуда: Сидней
Сообщений: 1049
Спасибо
3 окт 19, 09:49    [21985564]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить