22

1 列を除くすべての列で null 値を持つすべての行を返すクエリを作成しようとしています。一部の行には、どこかに複数の null エントリがあります。除外したい列が 1 つあります。これは、現時点ではすべてのエントリが null であり、null 値を持つことができる唯一の列であるためです。WHERE にすべての列を含める方法がわからないため、行き詰まっています。

SELECT *
FROM Analytics
WHERE * IS NULL

別の方法として、1 列のカウントを行うこともできますが、テーブルには約 67 列あります。

SELECT COUNT(*)
FROM Analytics
WHERE P_Id IS NULL
4

5 に答える 5

16

SQL Serverでは、この回答からアイデアを借りることができます

;WITH XMLNAMESPACES('http://www.w3.org/2001/XMLSchema-instance' as ns)
SELECT *
FROM   Analytics
WHERE  (SELECT Analytics.*
        FOR xml path('row'), elements xsinil, type
        ).value('count(//*[local-name() != "colToIgnore"]/@ns:nil)', 'int') > 0

SQL フィドル

おそらく、67 列のクエリを作成する方が効率的ですが、入力の手間が省け、クエリを生成するために動的 SQL を使用する必要がなくなります。

于 2013-01-23T21:08:41.483 に答える
1

使用しているRDBMSによっては、(明示的に...と言うのではなくWHERE col1 IS NULL and col2 IS NULL and col3 IS NULL)唯一のオプションは動的SQLを使用することだと思います。

たとえば、SQL Serverデータベースからすべての列名を取得する場合は、次のような名前を使用してそれらの名前を返すことができます。

SELECT
     name
FROM
     sys.columns
WHERE
     object_id = OBJECT_ID('DB.Schema.Table')

FOR XMLを使用して、WHERE句を作成できます。

SELECT Name + ' IS NULL AND ' AS [text()]
FROM sys.columns c1
WHERE     object_id = OBJECT_ID('DB.Schema.Table')
ORDER BY Name
FOR XML PATH('')

これがあなたが始めるのに役立つことを願っています。

幸運を。

于 2013-01-23T20:49:02.367 に答える
1

'x'どのフィールドにもデータがないと仮定すると、テストするようなテーブルはありません。これはうまくいくはずSql-Serverです。(デモ)

注: keyColumnを次のようにフィルタリングしましたc.name != 'keyColumn'

DECLARE @S NVARCHAR(max), @Columns VARCHAR(50), @Table VARCHAR(50)

SELECT @Columns = '66', --Number of cols without keyColumn
       @Table = 'myTable'

SELECT @S =  ISNULL(@S+'+ ','') + 'isnull(convert(nvarchar, ' + c.name + '),''x'')'  
FROM sys.all_columns c 
WHERE c.object_id = OBJECT_ID(@Table) AND c.name != 'keyColumn'

exec('select * from '+@Table+' where ' + @S + '= replicate(''x'',' + @Columns + ')')
于 2013-01-23T20:55:06.327 に答える
0

私のような SQL 初心者のユーザーにとって、上記のすべてのクエリを理解するのは非常に難しいようです。最も簡単な方法は、67 列すべてに対してクエリを作成することだと思います。基本的にはコピー&ペーストのプロセスです。例えば:

select count(*) from user where id is null or 
 name is null or 
 review_count is null or
 yelping_since is null or 
 useful is null or 
 funny is null;
于 2021-06-19T00:24:48.840 に答える