Mysql
 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

Позволете ми да обясня това малко.

Първо създавам курсор, който преминава през всички колони на една таблица. За всяка колона създадох sql скрипт за търсене в таблицата за ненулеви стойности за избраната колона. За тези редове, които отговарят на критериите, вземам неговия уникален идентификатор и го поставям във временна таблица и тази работа използвам за всички колони.

В крайна сметка само идентификатори, чийто брой е като броят на колоните, са вашият резултатен набор, тъй като само редове, които имат идентичен брой изяви като брой колони в таблицата, могат да бъдат редове с всички ненулеви стойности във всички колони.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 'ER_PARSE_ERROR' на възел mysql при вмъкване на множество стойности

  2. Извличане на низ за търсене в контекст

  3. Импортиране на множество csv файлове в mysql таблици

  4. Защо да използвате рамки? Убедете ме, че трябва да разбера Zend Framework и да го използвам

  5. Magento install се оплаква от липса на InnoDB, когато е наличен