伪:
select * from foo where [every column is not null]
Run Code Online (Sandbox Code Playgroud)
有没有办法在不指定实际列名的情况下执行此操作?
我能想到的一个可能的解决方案涉及使用动态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;
Run Code Online (Sandbox Code Playgroud)
这是SQLFiddle演示
显然,它可以用表名的参数包装到存储过程中
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 ;
Run Code Online (Sandbox Code Playgroud)
然后使用它
CALL sp_select_all_not_null('foo');
Run Code Online (Sandbox Code Playgroud)
这是SQLFiddle的演示
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |