2

現在、私はこの声明を持っています

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

なぜ失敗しているのか分かりますか?選択した要素が0.5より大きい場合、各行のテストを出力しようとしています

ありがとう!

4

1 に答える 1

4

このようなスカラー比較コンテキストのSELECTステートメントは、1行のみを返す必要があります。あなたの場合、複数の行を返す可能性があるため、失敗します。次の書き直されたクエリは、興味のあるものに近いものです。

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>
于 2012-10-31T03:20:50.687 に答える