如何运行MySQL查询,选择非空的所有内容?它会是这样的
SELECT * FROM schedule WHERE ((all)) IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
我只是删除所有并去...?
SELECT * FROM schedule WHERE IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
nos*_*nos 24
您必须在每列上明确说明条件,例如
SELECT *
FROM schedule
WHERE id IS NOT NULL
AND foo IS NOT NULL
AND bar IS NOT NULL; -- and so on..
Run Code Online (Sandbox Code Playgroud)
Ult*_*mit 15
您可以连接字段以便只写入where-condition:
SELECT *
FROM SCHEDULE
WHERE ID || FOO || BAR IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)
它取决于你所说的"非空的一切":
所有列都不能 null
select * from schedule where col1 is not null AND col2 is not null AND ..
至少应该有一列 non-null
select * from schedule where col1 is not null OR col 2 is not null OR ..
至少这是你在"通用sql"中的方法.我不知道MySql是否有特殊的语法.
您需要通过查看information_schema数据库获取表的列的列表.
假设您的数据库已被调用,mydata并且您的表名称已被命名mytable.您可以通过发出以下语句来获取表的可空列的列表:
SELECT `COLUMN_NAME`
FROM `information_schema`.`COLUMNS`
WHERE `TABLE_SCHEMA` = 'mydata'
AND `TABLE_NAME` = 'mytable'
AND `IS_NULLABLE` = 'YES'
Run Code Online (Sandbox Code Playgroud)
我们的最终查询将如下所示:
SELECT * FROM `mydata`.`mytable`
WHERE CONCAT(<list of columns>) IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
我们现在缺少的是可空列的列表,以逗号分隔.我们将使用该GROUP_CONCAT函数生成最终语句,我们将按如下方式执行:
SET @query = CONCAT(
'SELECT * FROM `mydata`.`mytable` WHERE CONCAT(',
(SELECT GROUP_CONCAT(COLUMN_NAME)
FROM `information_schema`.`COLUMNS`
WHERE `TABLE_SCHEMA` = 'mydata' AND
`TABLE_NAME` = 'mytable'
AND `IS_NULLABLE` = 'YES'),
') IS NOT NULL');
PREPARE stmt_name FROM @query;
EXECUTE stmt_name;
Run Code Online (Sandbox Code Playgroud)
参考文献:
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
http://dev.mysql.com/tech-resources/articles/4.1/prepared-statements.html
| 归档时间: |
|
| 查看次数: |
51151 次 |
| 最近记录: |