2016-08-23 12 views
0

私はIF文を使用して、この選択クエリをしようとしたが、それがうまくいかなかった場合は、Specefic選択クエリでelseステートメント

はあなたにどんな解決策

をお持ちの

DELIMITER $$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `myProcedure`() 
BEGIN 
    set @sql=' Select IF(field1 = 1, \'Oui\', IF(field2 != 0 and field1 = 0,\'En 

    cours\', IF(field2 = 0 and field1 = 0,\'non\', \'non\'),\'non\')) as Payed 
    from myTable'; 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

    END$$ 
DELIMITER ; 

エラーメッセージをお願いします:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '),'non')) as Payed 
+0

IFの代わりにCase文を使用できます。 –

答えて

1

この回答によって直接問題は解決されない場合がありますが、CASE st atements、ロジックが読み少し簡単取得します。

SELECT CASE WHEN field1 = 1 THEN 'Oui' 
      WHEN field2 != 0 AND field1 = 0 THEN 'Encours' 
      ELSE 'non' 
     END AS Payed 
FROM myTable 

単一引用符をエスケープするANSI準拠した方法は、例えば、それらのうちの2つを使用することです''。したがって、@sql変数は次のようになります。

SET @sql= 'SELECT CASE WHEN field1 = 1 THEN ''Oui'' 
     WHEN field2 != 0 AND field1 = 0 THEN ''Encours'' 
      ELSE ''non'' 
     END AS Payed 
FROM myTable'; 
+1

@Shadow OP問題の一部は、IFを使用しています。これには、ネストされたカッコの多くのレイヤが必要です。私は通常downvoted答えを元に戻すことはありませんが、私は 'CASE'を使用するとすぐに2つの問題を解決すると思いますので、この場合でした。 –

+0

私のdownvoteは、if()関数がOPで使われた方法では使用できないという説明によるものです。あなたが答えを訂正してから、私は下線を引く。 – Shadow

関連する問題