2

我有以下查询:

  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`

但是,我不知道如何使用子查询来做到这一点。

4

1 回答 1

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`
于 2013-06-21T18:39:12.460 回答