在哪里IS NOT NULL

Sam*_*Sam 22 mysql sql

如何运行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)

  • 所以不可能得到所有不为空的东西......该死。 (2认同)

Ult*_*mit 15

您可以连接字段以便只写入where-condition:

SELECT *
  FROM SCHEDULE
 WHERE ID || FOO || BAR IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的速记,但建议; 这不一定会在所有数据库中运行.例如,如果第一列是文本类型,Postgres的更高版本将只接受此; 例如varchar,char或text.我还可以想象某些数据库需要为每个不属于这种类型的列进行强制转换. (4认同)
  • 如果您有长文本字段,则连接是一项昂贵的操作.此外,结果的长度可能太长,错误. (3认同)
  • 如果您有长文本字段,则可以使用:WHERE ID || SUBSTR(FOO,1,1)|| SUBSTR(FOO,1,1)不是空的; 这样,您只提取每个长文本字段的第一个字符. (2认同)

Han*_*ing 6

它取决于你所说的"非空的一切":

  • 所有列都不能 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是否有特殊的语法.


Ana*_*nax 6

您需要通过查看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