0

私は 15 個のテーブルを持っており、それらにはすべて CreationDate 列と LastModifiedDate 列があり、すべてのテーブルをクエリしてテーブル内の null 値を探す方法があります。

これは私がしなければならないと考えていることですが、次のことを行うためのより効率的な方法または簡単な方法があるかどうか疑問に思っていました

Select COUNT(*) FROM Table1, Table2, Table3
WHERE table1.CreationDate IS NULL
      OR table1.LastModifiedDate IS NULL
      OR table2.CreationDate IS NULL
      OR table2.LastModifiedDate IS NULL
      OR table3.CreationDate IS NULL
      OR table3.LastModifiedDate IS NULL
4

2 に答える 2

3
select count(*)
from (
    select CreationDate, LastModifiedDate from Table1
    union all
    select CreationDate, LastModifiedDate from Table2
    union all
    select CreationDate, LastModifiedDate from Table3
) a 
where CreationDate is null or LastModifiedDate is null
于 2012-08-09T15:45:09.487 に答える
0

元のクエリは期待どおりに機能しません。欠損値を持つすべての行間でクロス結合を行います。これにより、大量のデータが発生する (すべてのテーブルに複数の行がある場合) か、まったくない (行が欠落していない場合) 可能性があります。

不足しているテーブル名を知りたいと思います。

select tablename, count(*),
       sum(case when CreationDate is null then 1 else 0 end) as MissingCreationDate,
       sum(case when LastModifiedDate is null then 1 else 0 end) as MissingLastModifiedDate
from ((select 'table1' as tablename,  CreationDate, LastModifiedDate
       from Table1 
      ) union all
      (select 'table2' as tablename, CreationDate, LastModifiedDate
       from Table2
      ) union all
      . . .
      (select 'table15', CreationDate, LastModifiedDate
       from Table3
      ) 
     ) t
where CreationDate is null or LastModifiedDate is null
group by tablename
于 2012-08-09T15:58:48.907 に答える