在MySQL SELECT子查询中使用IF

时间:2013-06-21 18:34:02

标签: mysql

我有以下查询:

  SELECT `users`.`id`, `login`, `fullname`, `active`, `sex`, `height`,
  `special-title`, `language`, `body-fat`,
  `main-photo-id`, `main-photo-offset`, `weight`,
  `objective`, `level`, `config-comments-type`,
  (
     SELECT `type`
     FROM `users-pro`
     WHERE
        (`user` = `users`.`id`)
        AND
        (`starts` <= $time)
        AND(
           (`ends` > $time)
           OR
           (`ends` IS NULL)
        )
     LIMIT 1
  ) as `account_type`
  FROM `users`

我想知道如何/在哪里添加IF语句,这样如果内部SELECT返回NULL(users-pro中的用户没有条目,则值1会被退回。

如果没有子查询,这就是我通常所做的事情:

SELECT IF(`rank` = 1, `rank`, 0) as `rank`

但是,我不知道如何使用子查询来执行此操作。

1 个答案:

答案 0 :(得分:2)

通过将子查询包装在其中,您可以使用ANSI标准coalesce()函数:

SELECT `users`.`id`, `login`, `fullname`, `active`, `sex`, `height`,
  `special-title`, `language`, `body-fat`,
  `main-photo-id`, `main-photo-offset`, `weight`,
  `objective`, `level`, `config-comments-type`,
  coalesce((
     SELECT `type`
     FROM `users-pro`
     WHERE
        (`user` = `users`.`id`)
        AND
        (`starts` <= $time)
        AND(
           (`ends` > $time)
           OR
           (`ends` IS NULL)
        )
     LIMIT 1
  ), 1) as `account_type`
  FROM `users`