我必须休息一天。这应该是显而易见的,但我不明白。
-- check for necessary updates to dbnotes
select count(distinct table_name)
from ccsv4.[INFORMATION_SCHEMA].[COLUMNS]
返回46
select count(distinct table_name)
from dbnotes
返回44
select distinct table_name
from ccsv4.[INFORMATION_SCHEMA].[COLUMNS]
where table_name not in (select distinct table_name from dbnotes)
order by table_name
什么都不返回
select distinct table_name
from dbnotes
where table_name not in (select distinct table_name
from ccsv4.[INFORMATION_SCHEMA].[COLUMNS])
order by table_name
什么都不返回
我想念的是什么人?
答案 0 :(得分:1)
您正在使用not in
。如果子查询中的任何值为NULL
,则不会返回任何内容。
使用子查询,总是使用not exists
。它具有正确的语义:
select distinct table_name
from ccsv4.[INFORMATION_SCHEMA].[COLUMNS] c
where not exists (select 1
from dbnotes d
where d.table_name = c.table_name
);
我非常确定表格必须至少包含一列,因此您也可以使用information_schema.tables
。它为您节省了distinct
:
select table_name
from ccsv4.information_schema.tables t
where not exists (select 1
from dbnotes d
where d.table_name = t.table_name
);