仅选择非空列的MySQL查询

8

我有这段mysql代码:

SELECT firstname, lastname, age, gender from persons WHERE id = 1;

显示:

> firstname: Marlon 
> 
> lastname: Null
> 
> age: 26
> 
> gender: male

What I want to do is:

SELECT IF NULL DONT SELECT(firstname), IF NULL DONT SELECT(lastname), IF NULL DONT SELECT(age), IF NULL DONT SELECT(gender) from persons WHERE id = 1;

显示:

> firstname: Marlon 
> 
> age: 26
> 
> gender: male

因为它是空的,所以未显示lastname。


你为什么想要这样做?而且,执行此查询时不会显示这个(除非使用\G分隔符!?) - Strawberry
2个回答

4
当然你不能这样做;相反,你可以使用COALESCE()IFNULL()函数来在NULL的情况下提供默认值,例如:
SELECT firstname, 
COALESCE(lastname,'N/A'),
age,
gender from persons WHERE id = 1;

如果你想完全删除该记录,那么可以使用 WHERE 条件来实现。

SELECT firstname, lastname, age, gender from persons 
WHERE id = 1 AND lastname IS NOT NULL;

2
即使没有隐藏列的方法,但是您可以避免在输出中出现空值。因此,有以下两种方式:

方法一:您可以将空字段保留为空白。

SELECT IFNULL(firstname,'') AS firstname, 
IFNULL(lastname,'') AS lastname, 
IFNULL(age,'') AS age, 
IFNULL(gender,'') AS gender 
FROM persons WHERE id = 1;

方法2:您可以使用连接函数将单列中的所有值获取。

SELECT CONCAT
(
IFNULL(firstname,''),' ',
 IFNULL(lastname,''),' ', 
IFNULL(age,''),' ', 
IFNULL(gender,'')
) 
FROM persons WHERE id = 1;

我认为method1会显示该列,即使它为空,对吗? - Marlon Buendia
我的问题是“仅选择MySQL列如果不为空”,如果该列为空,则不应显示。看看我的第二个显示,它应该像那样。 - Marlon Buendia
2
@MarlonBuendia:我已经在我的答案顶部提到了,似乎不可能通过SQL查询隐藏任何列,但是如果有其他替代方案可以解决你的问题,你可以尝试一下......但是如果你只是想要隐藏它们,那么你必须使用任何小程序。 - Zafar Malik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接