我有以下查询:
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`
但是,我不知道如何使用子查询来执行此操作。
答案 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`