mysql - 如何在选择查询中使用 IF 条件显示不为空的列

标签 mysql if-statement

我想根据以下内容在选择查询中显示一列:

1-如果结果不为空,则显示该列。

2-如果结果为空,则不显示该列。

我尝试了这个,但它不起作用,它始终显示该列(空或非空)

select 
 if(surname  is null,'',surname) as surname
from my_table

最佳答案

如果您仍然想要一个示例...这里就是。
顺便提一句。此示例有多个列(id 和给定名称)。如果您只有一个姓氏列,您可以用另一种方式来完成此操作,但这取决于您的“脚本”的其余部分如何执行。 (因为在这种情况下选择不会返回任何列,并且这对于选择无效)

数据

CREATE TABLE my_table(
 id int(11) NOT NULL AUTO_INCREMENT,
 surname VARCHAR(20),
 givenname VARCHAR(20),
 PRIMARY KEY (id)
);

INSERT INTO my_table(givenname, surname) VALUES
("me", null),
("you", null),
(null, null),
("and sombody else", null);

动态SQL

SET @nr_names = (SELECT COUNT(*) FROM my_table WHERE NOT(surname IS null));
SET @fields = (SELECT if(@nr_names=0, "id, givenname", "id, givenname, surname"));
SET @query = CONCAT("select ", @fields, " from my_table");
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

将会导致

1   me
2   you
3   (null)
4   and sombody else

将数据更改为

INSERT INTO my_table(givenname, surname) VALUES
("me", null),
("you", "works"),
(null, null),
("and sombody else", null);

你得到了

1   me                (null)
2   you               works
3   (null)            (null)
4   and sombody else  (null)

Working SQL Fiddle.
(不幸的是,SQL Fiddle 已经不再是以前的样子了,现在速度不够快)

我无法再让 SQL Fiddle 工作。 这是替代方案:RexTester
见无栏姓。将插入数据中的一个空值更改为文本,然后单击“运行它”。

关于mysql - 如何在选择查询中使用 IF 条件显示不为空的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39891923/

相关文章:

java - 我如何做出 if 语句,如果一个是一对,另一个不是,则不幸运,但如果两者都是一对,则幸运?

if-statement - 如何将使用三元运算符的 C++ 代码移植到 Rust?

mysql - 如何显示所有用户定义的变量(MySQL)

mysql - 根据另一个表的条件创建新列

PHP - 查找范围内的缺失数据

Java:返回语句编译错误

python - if和inline if,各有什么优缺点?

PHP - bind_result 到数组

c# - Nreco.VideoConverter,如何将转换后的文件名保存到数据库中?

python - 如何测试多个变量与单个值的相等性?