2012-10-31 107 views
2

目前我有這個說法MySQL的if語句失敗,不知道如何解決

IF(0.5 < SELECT (FLOOR(10*RAND()*pResourcium) AS TestVar FROM siegeverse.rooms rm) AS T)) 
THEN SELECT 'TEST' 

任何想法,爲什麼它失敗的原因?如果所選元素大於0.5,則嘗試將其輸出到每個行的測試。

謝謝!

+0

爲什麼你認爲這應該起作用?請參閱['mysql IF語句語法'](http://dev.mysql.com/doc/refman/5.6/en/if.html) – Nemoden

回答

4

這種標量比較上下文中的SELECT語句應該只返回一行。在你的情況下,它可能會返回多行,因此失敗。以下重寫的查詢與您感興趣的內容很接近:

IF EXISTS (SELECT * 
FROM 
    (SELECT 
     CASE 
      WHEN (FLOOR(10*RAND()*pResourcium) >= 0.5 THEN 'TEST' 
      ELSE NULL 
     END AS TestVar 
    FROM 
     siegeverse.rooms rm 
    ) AS A 
WHERE A.TestVar IS NOT NULL) 
THEN 
    <run the stored procedure> 
+0

不起作用,我真正想要做的是運行Proc,如果語句我寫的是真的 – Badmiral

+1

你可以將它封裝在IF EXISTS語句中,並運行你的過程,並在響應中更新。 – Vikdor