我有一个只有一个条目的表。我必须获取其值不为null的列值。请建议我查询MySQL,以便我可以实现这一点。我的表是:
在此表中, 3 列具有Null值。所以我不想要这些列,查询应该返回非空的值。
我也可以获得列名吗?就像我想得到列的名称,即 min_p5 ,其值不为空。因此,我可以将列名称拆分为字符串,并在计算中使用 5 。请建议我回答。
答案 0 :(得分:2)
SELECT *
FROM table
WHERE YourColumn IS NOT NULL;
答案 1 :(得分:2)
select * from table where column_name is not null
答案 2 :(得分: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 :(得分:1)
尝试以下查询来解决您的问题,
select * from table
where column_name IS NOT NULL
答案 4 :(得分:0)
好像你想回来:
| 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。如果您的列是数字而不是字符串,则可能需要一些小修复。但是,我建议您尝试不同的方法或重新考虑您的表结构。