2017-08-11 92 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計數 –