【问题标题】:How to get column name whose value is not null in mysql如何在mysql中获取值不为null的列名
【发布时间】:2014-03-11 22:22:36
【问题描述】:

我有一个只有一个条目的表。我必须获取那些值不为空的列值。请建议我查询 MySQL,以便我可以实现它。我的桌子是:

在此表中 3 列具有 Null 值。所以我不想要这些列,查询应该返回不为空的值。

我也可以获取列名吗?就像我想获取列的名称,即 min_p5 其值不为空。因此,我可以将列名分解为字符串并在计算中使用 5。请建议我回答。

【问题讨论】:

  • 如果检查列值为NOT NULL,请使用SELECTCASE,然后返回列名,否则返回NULL
  • 请向我提供查询..

标签: php mysql phpmyadmin


【解决方案1】:

尝试以下查询来解决您的问题,

select * from table
where column_name IS NOT NULL

【讨论】:

    【解决方案2】:

    我认为这是你需要的:

    假设您的表名是“订单”[请相应更改]

    $q="show columns from orders";
    $res=mysql_query($q) or die(mysql_error());
    $arr_field=array();
    while($row=mysql_fetch_object($res)){
        $field=$row->Field;
        $q1="select ".$field." from orders where ".$field."!=0"; //if string then '0'
        $res1=mysql_query($q1) or die(mysql_error());
        if(mysql_num_rows($res1)>0){
            $arr_field[]=$field;
        }
    }
    $q="select ";
    foreach($arr_field as $field){
        $q.=$field.",";
    }
    $q=rtrim($q,",");
    $q.=" from orders";
    $res=mysql_query($q) or die(mysql_error());
    while($row=mysql_fetch_object($res)){
        foreach($arr_field as $field){
            print($field."==".$row->$field."<br/>");
        }
    }
    

    运行这个,我希望你能得到一个想法......

    【讨论】:

      【解决方案3】:

      你好像想返回:

      | POINT_ID | BUS_ID | MIN_P5 | MIN_P15 |
      |----------|--------|--------|---------|
      |     P101 |   B101 |   1000 |    3000 |
      

      因为您要排除具有零值的列。在 MySQL 中这样做并不容易,因为您需要使用准备好的语句:

      SELECT
        CONCAT(
          'SELECT CONCAT(\'SELECT \',
          CONCAT_WS(\',\',',
          GROUP_CONCAT(
          CONCAT(
            'CASE WHEN EXISTS(SELECT * FROM TABLENAME WHERE ',
            `column_name`,
            '!=\'0\') THEN \'',
            `column_name`,
            '\' END')
            ),
          '),\' FROM tablename\') FROM tablename INTO @final_sql'
        )
      FROM   `information_schema`.`columns` 
      WHERE  `table_schema`=DATABASE() 
             AND `table_name`='tablename'
      INTO @sql;
      
      PREPARE stmt FROM @sql;
      EXECUTE stmt;
      PREPARE finalstmt FROM @final_sql;
      EXECUTE finalstmt;
      

      请看小提琴here。如果您的列是数字而不是字符串,则可能需要进行一些小修复。不过,我建议您尝试不同的方法或重新考虑您的表结构。

      【讨论】:

        【解决方案4】:
        select *  from table where column_name is not null
        

        【讨论】:

          【解决方案5】:
          SELECT * 
          FROM table 
          WHERE YourColumn IS NOT NULL;
          

          来源:MySQL SELECT only not null values

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-10-07
            • 1970-01-01
            • 1970-01-01
            • 2018-07-08
            相关资源
            最近更新 更多