Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách lấy các hàng có giá trị cột không rỗng

Tôi đã tìm thấy thứ gì đó, nhưng điều đó có nghĩa là sử dụng CURSOR

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

Hãy để tôi giải thích điều này một chút.

Đầu tiên, tôi tạo con trỏ để lặp qua tất cả các cột của một bảng. Đối với mỗi cột, tôi đã tạo tập lệnh sql để tìm kiếm trong bảng các giá trị không null cho cột đã chọn. Đối với những hàng đáp ứng tiêu chí, tôi lấy ID duy nhất của nó và đặt trong bảng tạm thời, và công việc này tôi đang sử dụng cho tất cả các cột.

Cuối cùng, chỉ ID có số lượng giống như số cột là tập kết quả của bạn, bởi vì chỉ các hàng có số lần xuất hiện giống nhau như số cột trong bảng mới có thể là các hàng có tất cả các giá trị không rỗng trong tất cả các cột.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MariaDB lỗi? THÍCH Bỏ trốn bị hỏng

  2. Những hàng nào được trả về khi sử dụng LIMIT với OFFSET trong MySQL?

  3. Tìm nhóm bản ghi phù hợp với nhiều giá trị

  4. Laravel $ q-> where () giữa các ngày

  5. Làm cách nào để chỉ chọn các bản ghi được nhóm lại nếu mọi bản ghi trong một nhóm đáp ứng một tiêu chí nhất định trong MySQL?