sql >> データベース >  >> RDS >> Mysql

列の値がnullではない行を取得する方法

    何かを見つけましたが、それはカーソルを使用することを意味します

    DECLARE @ColumnName VARCHAR(200)
    DECLARE @ColumnCount INT
    DECLARE @sql VARCHAR(400)
    
    CREATE TABLE #tempTable (Id INT)
    
    DECLARE GetNonNullRows CURSOR 
    FOR 
        SELECT c.NAME, (SELECT COUNT(*) FROM sys.columns col WHERE col.object_id = c.OBJECT_ID)  FROM sys.tables AS t
        JOIN sys.columns AS c ON t.object_id = c.object_id
        WHERE t.name = 'SomeTable' AND t.type = 'U'
    
    OPEN GetNonNullRows
    FETCH NEXT FROM GetNonNullRows INTO @ColumnName, @ColumnCount
    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @sql = 'SELECT st.UniqueId FROM SomeTable AS st WHERE ' + CONVERT(varchar, @ColumnName) + ' IS NOT NULL'    
        INSERT INTO #tempTable
        EXEC (@sql)
    
    FETCH NEXT FROM GetNonNullRows INTO @ColumnName, @ColumnCount
    END 
    
    CLOSE GetNonNullRows
    DEALLOCATE GetNonNullRows
    
    SELECT * FROM SomeTable AS st1
    WHERE st1.UniqueId IN (SELECT Id FROM #tempTable AS tt
    GROUP BY Id
    HAVING COUNT(Id) = @ColumnCount)
    
    
    DROP TABLE #tempTable
    

    これについて少し説明させてください。

    まず、1つのテーブルのすべての列を反復処理するカーソルを作成します。列ごとに、選択した列のnull以外の値をテーブルで検索するSQLスクリプトを作成しました。基準を満たす行については、一意のIDを取得して一時テーブルに配置し、このジョブをすべての列に使用しています。

    最後に、列数と同じ数のIDのみが結果セットになります。これは、テーブルの列数など、外観の数が同じである行のみが、すべての列にすべてnull以外の値を持つ行である可能性があるためです。



    1. mysqlの一時テーブル列を一覧表示します

    2. MySQLUNIONでのステートメント評価と変数割り当ての順序

    3. ゼロからデータベースモデルを作成する方法

    4. PostgreSQL:フォーマット間隔を分単位