最优雅的方式来选择MySQL中多个字段为NULL的行

时间:2016-01-14 01:16:15

标签: mysql null

我有一个表格,其中大多数行都洒有NULL ......但我只想匹配那些除了2或3列之外什么都没有但只保留NULL的特定行。

这样的东西
SELECT * 
FROM sometable
WHERE
ALL(col1, col2, col3) IS NULL;

不起作用。

我真的必须写

WHERE
co1 IS NULL 
AND
col2 IS NULL
...
AND col150 IS NULL

一直走出去?

1 个答案:

答案 0 :(得分:0)

我担心这样做会更简单。

但你可以从

获得帮助
  

INFORMATION_SCHEMA.COLUMNS

表。

您可以通过此查询获取表的所有列名。

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'YOUR_DATABASE_NAME'
AND TABLE_NAME = 'YOUR_TABLE_NAME';

您可以修改此查询以使其适用于您的情况。

SELECT
    SUBSTRING(
        GROUP_CONCAT(
            (
                CASE
                WHEN COLUMN_NAME NOT IN ('COL1','COLN') THEN
                    CONCAT(
                        COLUMN_NAME,
                        ' IS NULL AND '
                    )
                ELSE
                    ''
                END
            ) SEPARATOR ''
        ),
        1,
        LENGTH(
            GROUP_CONCAT(
                (
                    CASE
                    WHEN COLUMN_NAME NOT IN ('ID') THEN
                        CONCAT(
                            COLUMN_NAME,
                            ' IS NULL AND '
                        )
                    ELSE
                        ''
                    END
                ) SEPARATOR ''
            )
        ) - 4
    )
FROM
    INFORMATION_SCHEMA. COLUMNS
WHERE
    TABLE_SCHEMA = 'YOUR_DATABASE'
AND TABLE_NAME = 'YOUR_TABLE';

以上查询将生成类似'COL2 IS NULL AND COL3 IS NULL'的字符串 因此,您可以获取此字符串并将其放在原始查询的where条件中。

N:B:仅提及 在WHERE CLAUSE [[CASE WHEN COLUMN_NAME NOT IN ('COL1','COLN')]]中的那些列检查NULLABILITY。