¿Cómo selecciono algunas columnas en una tabla que solo contiene valores NULOS para todas las filas? Supongamos que si la tabla tiene 100 columnas, entre estas 100 columnas 60 columnas tiene valores nulos. ¿Cómo puedo escribir dónde estoy para verificar si 60 columnas son nulas?Consulta SQL para comprobar si 40 columnas en la tabla es nula
Respuesta
where c1 is null and c2 is null ... and c60 is null
acceso directo mediante string concatenation
(sintaxis de Oracle):
where c1||c2||c3 ... c59||c60 is null
Desafortunadamente, el último bit se basa en la incapacidad cerebral de Brain para decir la diferencia entre una cadena vacía y NULL. No es una buena solución. – paxdiablo
Pero voy a votar porque el primer bit es la forma correcta de hacerlo, sin posibilidad de refactorizar la tabla DB. – paxdiablo
Si su SQL Server, podría usar coalesce ... – Naren
tal vez con un COALESCE
SELECT * FROM table WHERE coalesce(col1, col2, col3, ..., colN) IS NULL
Si hay alguna posibilidad de utilizar un índice en cualquiera de estos campos, lo ha eliminado al ponerle una función. – dkretz
Sí, las funciones por fila son un asesino de rendimiento en cualquier mesa de tamaño decente. – paxdiablo
coalesce solo funciona cuando todas esas columnas tienen tipos de datos compatibles (al menos en Oracle no funciona para una combinación de columnas de número, fecha y varchar) –
Sería de gran ayuda saber que la carne deshuesada que está utilizando y quizá cuál o cuáles han db framework si usa uno.
Esto debería funcionar en cualquier base de datos.
Algo como esto probablemente sería un buen procedimiento almacenado, ya que no hay parámetros de entrada para él.
select count(*) from table where col1 is null or col2 is null ...
¿Estás tratando de averiguar si un conjunto específico de 60 columnas son nulos, o hacer lo que desea es averiguar si cualquiera 60 de las 100 columnas son nulos (no necesariamente el mismo 60 para cada fila ?)
Si es esto último, una forma de hacerlo en el oráculo sería utilizar la función NVL2, así:
select ... where (nvl2(col1,0,1)+nvl2(col2,0,1)+...+nvl2(col100,0,1) > 59)
una prueba rápida de esta idea:
select 'dummy' from dual where nvl2('somevalue',0,1) + nvl2(null,0,1) > 1
Devuelve 0 filas rato:
select 'dummy' from dual where nvl2(null,0,1) + nvl2(null,0,1) > 1
Devuelve 1 fila como se esperaba desde hace más de una de las columnas son nulos.
En primer lugar, si tiene una tabla que tiene tantos nulos y utiliza SQL Server 2008, puede definir la tabla con columnas dispersas (http://msdn.microsoft.com/en-us/library/cc280604.aspx).
En segundo lugar, no estoy seguro de si la fusión resuelve la pregunta: parece que Ammu realmente podría querer encontrar la lista de columnas que son nulas para todas las filas, pero podría haber malentendido. Sin embargo - es una pregunta interesante, así que escribí un procedimiento para listar las columnas NULL para una mesa determinada:
IF (OBJECT_ID(N'PrintNullColumns') IS NOT NULL) DROP PROC dbo.PrintNullColumns; go CREATE PROC dbo.PrintNullColumns(@tablename sysname) AS BEGIN SET NOCOUNT ON; DECLARE @query nvarchar(max); DECLARE @column sysname; DECLARE columns_cursor CURSOR FOR SELECT c.name FROM sys.tables t JOIN sys.columns c ON t.object_id = c.object_id WHERE t.name = @tablename AND c.is_nullable = 1; OPEN columns_cursor; FETCH NEXT FROM columns_cursor INTO @column; WHILE (@@FETCH_STATUS = 0) BEGIN SET @query = N' DECLARE @c int SELECT @c = COUNT(*) FROM ' + @tablename + ' WHERE ' + @column + N' IS NOT NULL IF (@c = 0) PRINT (''' + @column + N''');' EXEC (@query); FETCH NEXT FROM columns_cursor INTO @column; END CLOSE columns_cursor; DEALLOCATE columns_cursor; SET NOCOUNT OFF; RETURN; END; go
Aquí es otro método que me parece lógico también (utilizar Netezza o TSQL)
SELECT KeyColumn, MAX(NVL2(TEST_COLUMN,1,0) AS TEST_COLUMN
FROM TABLE1
GROUP BY KeyColumn
Así que cada TEST_COLUMN
que tiene MAX
valor de 0 es una columna que contiene todos los nulos para el conjunto de registros. La función NVL2
indica que si los datos de la columna no son nulos, devuelva un 1, pero si es nulo, entonces devuelva 0.
Tomando el MAX
de esa columna, se revelará si alguna de las filas no es nula. Un valor de 1 significa que hay al menos 1 fila que tiene datos. Cero (0) significa que cada fila es nula.
- 1. Compruebe si alguna columna NO ES NULA
- 2. ¿Cómo comprobar si la matriz es nula o está vacía?
- 3. ¿Cómo comprobar si una columna está vacía o nula utilizando la instrucción de selección de consulta SQL?
- 4. Comprobar si la tabla existe en C#
- 5. underscore.js para comprobar nula
- 6. para comprobar un objeto coredata es nula
- 7. ¿Cómo comprobar si la consulta MySQL es válida sin ejecutarla?
- 8. Usando consulta SQL para determinar si existe una tabla
- 9. Objective-C cómo comprobar si una cadena es nula
- 10. consulta SQL para la tabla del árbol
- 11. Comprobar si existe tabla
- 12. ¿Es posible que una tabla SQL tenga cero columnas?
- 13. Comprobar si la tabla hereda de otra tabla en PostgreSQL
- 14. ¿Cuánta consulta SQL es demasiada consulta SQL?
- 15. Comprobar si es IP en la subred
- 16. Seleccionar Distinto por 2 columnas en la consulta SQL
- 17. Consulta SQL JOIN con la Tabla
- 18. SQL Devuelve nulo si una columna es nula (al lado de COALESCE())
- 19. consulta LINQ para comprobar si hay valores duplicados
- 20. Cómo comprobar si hay duplicados en la tabla MySQL a través de varias columnas
- 21. taquigrafía para comprobar nula anidada C#
- 22. SQL máximo de varias columnas en la tabla pivote
- 23. jsoncpp cómo comprobar si la etiqueta es la afirmación nula .isNull de proyección()
- 24. cómo comprobar la restricción de columna no nula en Oracle sql?
- 25. Consulta SQL personalizada sin la tabla correspondiente
- 26. MYSQL - Clasificar 2 columnas Alfabéticamente, utilizando la segunda columna si la primera columna es nula
- 27. cómo comprobar si la tabla existe y si no existe Crear una tabla en SQL Server 2008
- 28. SQL Server: Obtener la clave principal tabla mediante consulta SQL
- 29. ¿Qué hará un SQLiteCursor si una columna es nula?
- 30. android-java: comprobar el valor booleano para comprobar nula
python, C#, y ruby? ¿Podría ayudarnos proporcionando la base de datos que está utilizando? – Damovisa
¿Quiere decir donde estas columnas son nulas para todas las filas? 40 o 60? ¿Qué base de datos? –
No entiendo la pregunta. ¿Desea saber para ciertas columnas si hay al menos un valor nulo en todas las filas? O si todos los valores son nulos? ¿O confundes filas con columnas? –