Внутреннее соединение SQL, а не в - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь выполнить запрос и не уверен, почему возвращенный набор записей отключен на 60 строк.

Select t1.*  into #temp1
from NameExt as t1
 join #temp1 as t2
on t1.AN = t2.AN --164172

Select t1.* into #temp3 
from NameExt as t1
where AN in (Select AN from #temp1) --164112

Когда я делаю пересечение или кроме # temp1 и # temp2, я не получаю никаких строк назад.

Действительно нужно понять, почему два запроса возвращают не одинаковую записьset.

Даже при этом возвращается то же количество строк, что и во втором запросе

Select * into #temp3 from NameExt as t1  where exists 
 ( Select 1 from #temp1 as t2 where t1.AN = t2.AN) --164112

Большое спасибо

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Согласно комментарию, у вас, вероятно, несколько строк в #temp1 с одинаковым значением в AN ...

   CREATE TABLE x (
     id   INT
   )

   CREATE TABLE y (
     id   INT,
     x_id INT
   )

   INSERT INTO x VALUES (1),    (2),    (3)
   INSERT INTO y VALUES (1, 2), (2, 2), (3, 3)

   SELECT *
   FROM x INNER JOIN y ON x.id = y.x_id

   -- a total of three rows

   -- x.id | y.id | y.x_id
   ------------------------
   --  2   |  1   |   2
   --  2   |  2   |   2
   --  3   |  3   |   3

   SELECT *
   FROM x
   WHERE x.id IN (SELECT y.x_id FROM y)

   -- a total of two rows

   -- x.id
   --------
   --  2
   --  3

http://sqlfiddle.com/#!18/7e1d1/2

0 голосов
/ 18 сентября 2018

Вы можете легко увидеть, какие значения вызывают проблемы, выполнив:

select t2.AN
from #temp1  t2
group by t2.AN
having count(*) > 1;

Дубликаты во второй таблице вызывают проблемы.Вы знаете, как это исправить.,,используя in или exists.

0 голосов
/ 18 сентября 2018

Ваш запрос неверен.Вы не можете выбрать и создать временную таблицу одновременно ..

Выберите t1. * В # temp1 из NameExt как t1 join # temp1 как t2 ont1.AN = t2.AN --164172

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