如何在 SQL 中 select 没有空值的行(在任何列中)?

how to select rows with no null values (in any column) in SQL?

我有一个 table 叫 table1

它有 100 列:{col1, col2, ...,col100}

我了解如何 SELECT 在特定列中包含空值,例如 col1:

SELECT *
FROM table1
WHERE col1 IS NOT NULL

How do I SELECT all rows that do not contain null values in any column

尝试

SELECT *
FROM table1
WHERE * IS NOT NULL

但这 returns MySQL(我正在使用)

中的一个错误

获取每列的长度并将它们相乘。如果结果不为空,则所有列都是非空值。尝试以下示例代码。由于我没有使用多个 AND 子句,这是一个更好的方法。

CREATE TABLE #Temp (OdSal INT,NewSal INT,EmpName CHAR(20),IsCurrentEmp BIT)

INSERT INTO #Temp VALUES
(100,150,'Vikas',1),        -- No null records
(NULL,NULL,NULL,NULL),      -- all records are null
(NULL,NULL,'Nayanthara',1), -- more than 1 column is null
(NULL,150,'Priyamani',1)    -- only one column is null

--Will return only one row
SELECT * FROM #Temp
WHERE LEN(OdSal) * LEN(NewSal) * LEN(EmpName) * LEN(IsCurrentEmp) IS NOT NULL

虽然我建议写出每个列名称并按照建议重构您的 table,但这里有一个使用 dynamic sql:

的选项
SET @sql = NULL;
SELECT CONCAT('SELECT * FROM table1 WHERE ', 
              GROUP_CONCAT(c.COLUMN_NAME SEPARATOR ' IS NOT NULL AND '), 
              ' IS NOT NULL') INTO @sql
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.TABLE_NAME = 'table1'
ORDER BY c.ORDINAL_POSITION;

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

您需要明确列出每一列。我会推荐:

select t.*
from t
where col1 is not null and col2 is not null and . . . 

有些人可能更喜欢更简洁(但更慢)的方法,例如:

where concat(col1, col2, col3, . . . ) is not null

尽管您可以使用元数据 table 或电子表格构建查询,但实际上这并不是一种简单的表达方式。

到 return 行中任何列都没有空值:(在 MYSQL 中)

SELECT *
FROM 表名
WHERE 表名.* 不为空