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

Откуда: Симферополь
Сообщений: 540
Помогите пожалуйста с написанием казалось бы простого запроса.

Есть две таблицы:
LinkRefDoc (r_IdDocument int, r_idLink int) и табличка temp (r_IDDocument int, r_IDLink int)
Мне надо найти записи отличающиеся по обеим полям. Т.е. оба поля в обеих таблицах не совпадают.
Т.е. тут связь много ко многим...

Заранее спасибо.
26 апр 12, 09:53    [12472560]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Andrew_vb1110
Т.е. тут связь много ко многим...
Это не связь, это непонятно что :-) Или вы неправильно сформулировали задачу.

При такой формулировке нужно вывести все комбинации записей из обеих таблиц, у которых поля не равны, это будет примерно перемножение количества записей в двух таблицах.
26 апр 12, 09:58    [12472593]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Andrew_vb1110,
Думаю так
select 
  r_IDDocument
  ,r_idLink

 from LinkRefDoc l
where not exists(select 1 from temp t where t.r_IDocument=l.r_IdDocument)
and not exists(select 1 from temp t where t.r_IDLink=l.r_idLink)
union all
select 
  r_IDDocument
  ,r_idLink

 from temp l
where not exists(select 1 from LinkRefDoc t where t.r_IDocument=l.r_IdDocument)
and not exists(select 1 from LinkRefDoc t where t.r_IDLink=l.r_idLink) 
26 апр 12, 10:02    [12472614]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
Andrew_vb1110
Member

Откуда: Симферополь
Сообщений: 540
alexeyvg
Andrew_vb1110
Т.е. тут связь много ко многим...
Это не связь, это непонятно что :-) Или вы неправильно сформулировали задачу.

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


Ну да, перемножение записей... Т.е. задача вывести записи с правой таблицы, в которых оба поля не равны левой таблицы...
26 апр 12, 10:02    [12472615]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SELECT *
  FROM LinkRefDoc L
  JOIN temp T
    ON NOT EXISTS(SELECT L.r_IDDocument INTERSECT SELECT T.r_IDDocument)
   AND NOT EXISTS(SELECT L.r_IDLink INTERSECT SELECT T.r_IDLink);
?
Или
SELECT *
  FROM LinkRefDoc L
  JOIN temp T
    ON NOT EXISTS
    (
     SELECT L.r_IDDocument INTERSECT SELECT T.r_IDDocument
     UNION ALL
     SELECT L.r_IDLink INTERSECT SELECT T.r_IDLink
    );
???
Прямое сравнение полей - это слишком банально
26 апр 12, 10:13    [12472661]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить