mysql如果语句失败,不确定如何修复

mysql如果语句失败,不确定如何修复,mysql,if-statement,Mysql,If Statement,目前我有这个声明 IF(0.5 < SELECT (FLOOR(10*RAND()*pResourcium) AS TestVar FROM siegeverse.rooms rm) AS T)) THEN SELECT 'TEST' 知道它为什么失败了吗?如果所选元素大于0.5,则尝试将其输出到每行的测试 谢谢 此类标量比较上下文中的SELECT语句应仅返回一行。在您的情况下,它可能返回多行,因此失败。以下重写的查询与您感兴趣的内容非常接近: IF EXISTS (SELECT *

目前我有这个声明

IF(0.5 < SELECT (FLOOR(10*RAND()*pResourcium) AS TestVar FROM siegeverse.rooms rm) AS T))
THEN SELECT 'TEST'
知道它为什么失败了吗?如果所选元素大于0.5,则尝试将其输出到每行的测试


谢谢

此类标量比较上下文中的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>

此类标量比较上下文中的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>

为什么你认为这应该有效?看,为什么你认为这应该有效?如果我写的语句是真的,我真正想做的就是运行一个Proc。你可以将它包装在if EXISTS语句中,然后运行你的过程,正如在响应中更新的那样。如果不工作,我真正想做的是运行一个Proc如果我写的语句是真的,你可以将它包装在if EXISTS语句中并运行你的过程,如回复中所述。