Убедитесь, что два столбца двух разных таблиц точно совпадают - PullRequest
6 голосов
/ 08 апреля 2010

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

Пример:

select count(distinct table1.col1)
  from table1
 where table1.col1 not in (select distinct table2.col1 
                             from table2);

Это вернет количество значений в table1.col1, которых нет в table2. Однако я не знаю, что это хорошее решение, так как оно не учитывает значения table2.col1, которых нет в table1.col1.

Ответы [ 4 ]

6 голосов
/ 08 апреля 2010

Вы можете использовать два EXCEPT запроса (или объединить их), чтобы проверить:

SELECT DISTINCT col1
FROM table1
EXCEPT
SELECT DISTINCT col1
FROM table2

Это покажет значения, которые существуют в таблице1, но не в таблице2. Затем снова запустите с перевернутыми именами таблиц.

3 голосов
/ 08 апреля 2010

Использование:

SELECT MAX(x.t1_missing_count) AS t1_missing_count, 
       MAX(x.t2_missing_count) AS t2_missing_count
  FROM (
SELECT COUNT(DISTINCT t1.col1) AS t1_missing_count,
       NULL AS t2_missing_count
  FROM TABLE_1 t1
 WHERE t1.col1 NOT IN (SELECT DISTINCT t2.col1 
                         FROM TABLE_2 t2)
UNION ALL
SELECT NULL,
       COUNT(DISTINCT t2.col1),           
  FROM TABLE_2 t2
 WHERE t2.col1 NOT IN (SELECT DISTINCT t1.col1 
                         FROM TABLE_1 t1)) x
1 голос
/ 08 апреля 2010
select count(*) from (

select
table1.col1 from table1 left join table2 on table1.col1 = table2.col2
where table2.col1 is null

union

select table2.col1 from table2 left join table 1 on table2.col1 = table1.col1
where table1.col1 is null

)
0 голосов
/ 08 апреля 2010
declare @count int, @count2 int


select @count = count(distinct table1.col1)
  from table1
 where table1.col1 not in (select distinct table2.col1 
                             from table2)

select @count2 = count(distinct table2.col1)
  from table2
 where table2.col1 not in (select distinct table1.col1 
                             from table1)

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