如何在mysql中获取值不为null的列名

Posted

技术标签:

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

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

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

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

【问题讨论】:

如果检查列值为NOT NULL,请使用SELECTCASE,然后返回列名,否则返回NULL 请向我提供查询.. 【参考方案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

【讨论】:

以上是关于如何在mysql中获取值不为null的列名的主要内容,如果未能解决你的问题,请参考以下文章

MySql 执行countcount(*) 与 count(列名) 区别

如果表 A 中的值不为空,我如何从表 B 中获取值

如何获取不为空的列名

C#中如何判断数据库中int字段为Null

如果列值不为 NULL,则 Python pandas 应用函数

如果值不为空,如何仅在对象中添加字段? Javascript