如何在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
,请使用SELECT
CASE
,然后返回列名,否则返回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(列名) 区别