Альтернативное использование одних и тех же таблиц в предложении IN дает разные результаты - я ожидал того же! - PullRequest
1 голос
/ 29 октября 2010

Я прочитал два листа Excel в двух временных таблицах, #temp и # temp1. Замена таблиц в предложении IN возвращает разные результаты.Я ожидал того же.Кто-нибудь может объяснить?

select * from #temp where name in (select comp_name from #temp1)

Возвращает 473 записи.

select * from #temp1 where comp_name in (select name from #temp)

Возвращает 1421 запись

Ответы [ 4 ]

1 голос
/ 29 октября 2010

Возможность нескольких записей в temp1 с одним именем comp_name? Все они будут соответствовать значениям имени из temp2

0 голосов
/ 29 октября 2010

Зависит от ваших данных наверняка. Если у вас есть данные, подобные приведенным ниже, у вас будет похожая проблема.

#temp
Name  CompName
A     X
A     Y
A     Z

#temp1
Name  CompName
A     X
B     X
C     A

В этом случае:

select * from #temp where name in (select comp_name from #temp1)

возвращает 3 строки

select * from #temp1 where comp_name in (select name from #temp)

возвращает 1 строку

0 голосов
/ 29 октября 2010

Если у вас есть дубликаты comp_name значений в # temp1, но один name в #temp:

  • Он будет совпадать только один раз в первом запросе, поэтому верните одну строку
  • 2-й запрос даст одну строку на дубликат

Что делает DISTINCT?

Примечание: запросы могут только всегда возвращать одни и те же данные, если обаТаблицы имеют одинаковое количество строк и одинаковое количество, если дублируются на значения.Он может вернуть одно и то же число по совпадению, если данные отличаются.

0 голосов
/ 29 октября 2010

В простейшем случае представьте, что #temp имеет в общей сложности 473 строки, а # temp1 имеет всего 1421 строку, и ВСЕ имя / имя_компьютера в обеих таблицах имеют одинаковое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...