PSEUDO:C'è un modo per verificare null su tutte le colonne in un carattere jolly selezionare?
select * from foo where [every column is not null]
C'è un modo per farlo senza specificare i nomi di colonna effettivi?
PSEUDO:C'è un modo per verificare null su tutte le colonne in un carattere jolly selezionare?
select * from foo where [every column is not null]
C'è un modo per farlo senza specificare i nomi di colonna effettivi?
Una possibile soluzione che posso pensare implica l'utilizzo dinamico SQL
SELECT GROUP_CONCAT(column_name SEPARATOR ' IS NOT NULL AND ')
INTO @sql
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = SCHEMA()
AND table_name = 'foo'
GROUP BY table_name;
SET @sql = CONCAT('SELECT * FROM foo WHERE ', @sql, ' IS NOT NULL');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Qui è SQLFiddle demo
Ovviamente può essere avvolto in una stored procedure con un parametro per il nome di una tabella
DELIMITER $$
CREATE PROCEDURE sp_select_all_not_null(IN tbl_name VARCHAR(64))
BEGIN
SELECT GROUP_CONCAT(column_name SEPARATOR ' IS NOT NULL AND ')
INTO @sql
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = SCHEMA()
AND table_name = tbl_name
GROUP BY table_name;
SET @sql = CONCAT('SELECT * FROM ', tbl_name, ' WHERE ', @sql, ' IS NOT NULL');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
DELIMITER ;
e quindi utilizzarlo
CALL sp_select_all_not_null('foo');
Ecco SQLFiddle demo per quel
ah ... è molto bello. Darò una prova. Grazie. –
@ Dr.Dredel Sei più che benvenuto :) Fai un giro. Puoi anche dare un'occhiata all'esempio di sqlfiddle che ho postato. – peterm
Temo di no - hai avuto modo di nominarli tutti. –
Solo una domanda sul perché non conosci i nomi del tuo tavolo? – bugwheels94
@Ankit, come accade sto lavorando con una tabella derivata dinamica che può avere tutti i tipi di colonne e tutti i tipi di nomi. Naturalmente posso costruire una stringa elaborata e brutta di AND, ma speravo di evitarlo (e penso che tu intenda i nomi delle mie colonne). –