Как сравнить две таблицы? - PullRequest
0 голосов
/ 26 мая 2020

это мой запрос

select * from table as a 
where a.* not in 
(select * from table B)

Я хочу, чтобы разница между двумя таблицами была определена c функцией?

1 Ответ

2 голосов
/ 26 мая 2020

По определению, EXCEPT возвращает отдельные строки путем сравнения результатов двух запросов.

EXCEPT возвращает отдельные строки из левого входного запроса, которые не выводятся правым входным запросом.

Базовые c правила:

  • Число и порядок столбцов должны быть одинаковыми во всех запросах.
  • Типы данных должны быть совместимы.
CREATE TABLE MyTableA (ColA int, ColB int)
CREATE TABLE MyTableB (ColA int, ColB int)
INSERT INTO MyTableA (ColA, ColB) VALUES (15,1),(10,1),(2,1),(2,1),(16,1),(2,2),(3,3),(3,3)
INSERT INTO MyTableB (ColA, ColB) VALUES (1,1),(1,1),(1,1),(2,2),(4,5),(1,1),(4,5)

GO

SELECT * FROM MyTableA
EXCEPT
SELECT * FROM MyTableB

Select *
from MyTableA as a where not exists (Select 1 from MyTableB as b
where a.ColA = b.ColA and a.ColB = b.ColB)
GO
ColA | ColB
---: | ---:
   2 |    1
   3 |    3
  10 |    1
  15 |    1
  16 |    1

ColA | ColB
---: | ---:
  15 |    1
  10 |    1
   2 |    1
   2 |    1
  16 |    1
   3 |    3
   3 |    3

db <> fiddle здесь

Вы можете видеть, что использование EXCEPT сгенерированных повторяющихся записей, если вы хотите избавиться от этого, вам может потребоваться столбец идентификатора для обеих таблиц и обновить ваш запрос до:

Select *
from MyTableA as a where not exists (Select 1 from MyTableB as b
where a.ColA = b.ColA and a.ColB = b.ColB and a.ID <> b.ID)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...