我想根据以下内容在选择查询中显示一列:
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/