如何在select查询中使用IF条件以显示非null的列

时间:2016-10-06 09:06:21

标签: mysql if-statement

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

如果你还想要一个例子......这里是。
B.T.W.此示例具有多个列(id和givenname)。如果您只有一个姓氏列,您可以通过其他方式执行此操作,但这将取决于您的“脚本”的其余部分,如何执行此操作。 (因为在这种情况下select不会返回任何列,而且对于select是无效的)

数据

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
看到没有列姓。将一个null更改为插入数据中的文本,然后单击“运行它”。

答案 1 :(得分:0)

根据评论编辑

如果要显示姓氏列,如果一个或多个值为NOT NULL,则可以使用以下IF / ELSE语句:

IF (SELECT COUNT(last_name) from people) > (0)
  SELECT first_name, last_name from people;
ELSE
  SELECT first_name from people;

请注意,您没有检查COUNT - MSSQL的WHERE子句中的“value IS NULL”或“value = NULL”,我也假设其他版本, not count' null'作为值。

架构1(对于上面的IF / ELSE):

create table people (first_name varchar(20), last_name varchar(20));
insert into people (first_name, last_name) values ('Mary', 'Smith');
insert into people (first_name, last_name) values ('Mark', 'Jones');
insert into people (first_name, last_name) values ('Michael', null);

架构2,如果你想运行它,带有IF / ELSE:

create table people_no_surnames (first_name varchar(20), last_name varchar(20));
insert into people_no_surnames (first_name, last_name) values ('Mary', null);
insert into people_no_surnames (first_name, last_name) values ('Mark', null);
insert into people_no_surnames (first_name, last_name) values ('Michael', null);

    IF (SELECT COUNT(last_name) from people_no_surnames) > (0)
  SELECT first_name, last_name from people_no_surnames;
ELSE
  SELECT first_name from people_no_surnames;

第一个模式将返回两个列(注意surname列中仍然会有一个NULL,所以如果你想用空字符串替换它,你必须把它放在SELECT语句中),第二个模式schema只返回first_name列。

希望这有帮助!