2017-08-11 97 views
-2

我在下面的查询中遇到问题。 Eveytime查询运行成功条件,它直接打印语句而不是执行。我感到震惊,我不知道如何解决它。任何人都可以指导我如何解决以下查询在mysql中执行语句如果条件

SELECT IF(
     (SELECT COUNT(*) 
       FROM INFORMATION_SCHEMA.VIEWS 
       WHERE table_name = 'user_details' 
       AND table_schema = 'user_details' 
     ) = 0 AND 
     (SELECT COUNT(*) 
       FROM INFORMATION_SCHEMA.COLUMNS 
       WHERE table_name = 'mobile_consumer' 
       AND table_schema = DATABASE() 
       AND column_name IN ('payment_ref', 'pp', 'tt') 
     ) = 3, 
     "Select * from users_details", 
     "Select 0" 
) 

上面查询SQL输出显示为“SELECT * FROM users_details”,但我想那是什么这句话应该执行和表的显示行。有什么建议么??

+2

如果当然。你的select语句不是一个“语句”,它是一个字符串。它不会被执行。研究存储过程/函数。 –

+0

当你的代码告诉mysql显示“select * from users_details”消息时,如果第一个计数= 0,第二个= 3,你会得到什么结果,否则返回“select 0”消息。 – Learning

回答

2

我猜你忘了在代码中使用THEN子句。此外,您已经编写了要在IF区块中执行的报表,应在THEN区块中编写报表。 另一件事是,你已经在“”中写下了你的查询,这使得它们成为一个简单的字符串,它将按照原样打印出来,而不用引号将它们写出来,并且如果需要将它们与其余代码隔离,请使用括号。您的更新代码如下所示。

IF 
    (SELECT COUNT(*) 
      FROM INFORMATION_SCHEMA.VIEWS 
      WHERE table_name = 'user_details' 
      AND table_schema = 'user_details' 
    ) = 0 
    AND 
    (SELECT COUNT(*) 
      FROM INFORMATION_SCHEMA.COLUMNS 
      WHERE table_name = 'mobile_consumer' 
      AND table_schema = DATABASE() 
      AND column_name IN ('payment_ref', 'pp', 'tt') 
    ) = 3 

Then 
    (Select * from users_details) 
ELSE 
    (Select 0) 
END IF 

或者你可以尝试使用case语句,如果你有多个语句执行对多个条件来评估你的条件。

SELECT 
    CASE WHEN 
     count1 = 0 AND count2 = 3 
    THEN 
     (Select * from users_details) 
    ELSE 
     (Select 0) 
    END 

FROM 
(
    SELECT 
     (SELECT COUNT(*) FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'user_details' AND table_schema = 'user_details') AS count1, 
     (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'mobile_consumer' AND table_schema = DATABASE() AND column_name IN ('payment_ref', 'pp', 'tt')) AS count2 
) 
    AS counts 

请标记为接受,如果它解决了您的问题。

+0

我的问题是固定的,但我在另一个scenarion 然后 试图同与更新命令(更新users_details设置散列= '32cdsfd235454df' 其中id = 324) ELSE (选择0) END IF 但它扔错误“附近的sql查询语法错误,更新users_details”。更新命令不适用于这种情况? –

+0

你可以共享完整的'''IF ELSE END IF'''语句吗?有时,实际的错误是由指向位置的左侧或右侧引起的。 –

+0

SELECT CASE WHEN COUNT1 = 20 THEN (UPDATE mobile_consumer设定散列= 123其中id = 1) ELSE (选择0) END FROM ( SELECT (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'mobile_consumer' AND TABLE_SCHEMA = '原')AS COUNT1 ) AS计数 –