我有一个表格,其中大多数行都洒有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
一直走出去?
答案 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。