2013-06-21 58 views
2

我有以下查詢:使用IF在MySQL的SELECT子查詢

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` 

不過,我不知道如何用子查詢來做到這一點。

回答

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` 
+0

這似乎是一個解決方案,是的。我想知道是否沒有更多的選擇,但我認爲我應該接受它。 –

+0

這就是我在我的代碼中使用的:-) –

+0

雖然COALESCE可以正常工作,但我相信從邏輯角度來看最合適的函數是[IFNULL](http://dev.mysql.com/doc/refman/5.5/ en/control-flow-functions.html#function_ifnull),因爲它在表達式爲NULL的情況下返回另一個值。爲了澄清:COALESCE接受多個參數並返回第一個非NULL值。 – wisefish