2017-01-24 11 views
0

SQLで簡単な、IF、ELSE IF、ELSE文を実行しようとしています。 何らかの理由でMySQLで私の声を聞いてくれません。 はそれ手動altho「クソマニュアルを読む」私に言って続けて:https://dev.mysql.com/doc/refman/5.7/en/exists-and-not-exists-subqueries.htmlMySQLのクエリIFが存在する場合はELSE

だけ私は私が道これを行うことはできません手段を引き受けるところ、後に、SELECT部分​​でこれを行う方法を述べるいませんこれを行うために使用されます。 残りの質問は、どうしたらいいですか?

また
SELECT EXISTS(SELECT 1 FROM `content` WHERE `ResourceKey`='Test' AND `Language`='en-GB') 
THEN 
    SELECT `Text` FROM `content` WHERE `ResourceKey`='Test' AND `Language`='en-GB'; 
ELSE 
    SELECT `Text` FROM `content` WHERE `ResourceKey`='Test' AND `Language`='nl-NL'; 
END IF; 

いくつかの情報:

Innodb version: 1.1.8 Protocol version: 10

答えて

1

あなたのクエリから一つのレコードを期待する場合は、このためにIF ELSEステートメントを使用する必要はありません。代わりにこれを試してみてください:場合

SELECT `Text` 
FROM `content` 
WHERE `ResourceKey`='Test' AND `Language` ΙΝ ('en-GB', 'nl-NL'); 
ORDER BY CASE 
      WHEN `Language` = 'en-GB' THEN 1 
      ELSE 2 
     END 
LIMIT 1 

あなたは常ににしたいいくつかのテキストを返し、何もレコードが返されない場合でも、その後、使用:私は持っデータベース内のレコードがないと仮定し

SELECT COALESCE(t2.Text, 'No record found') AS Text 
FROM (
    SELECT 'en-GB' AS lang UNION ALL 'nl-NL' UNION ALL 'no-lang') AS t1 
LEFT JOIN content AS t2 
    ON t1.lang = t2.Language AND t2.ResourceKey = 'Test' 
ORDER BY CASE 
      WHEN t1.lang = 'en-GB' THEN 1 
      WHEN t1.lang = 'nl-NL' THEN 2 
      ELSE 3   -- This is the case where t1.lang = 'no-lang' 
     END 
LIMIT 1 

Language = 'no-lang'

+0

うーん、これは私が予想よりもはるかにセクシーで、ええだけ1が見つからなかっもされていない場合、私は、単純なテキストを返すだろうか、機能の拡張に( 'ResourceKey' +言語=ユニーク)返さがあるはずです? –

+0

また、INはデータベースではサポートされていません。 –

+0

@JpHouten私が行った編集を確認してください。 –

0
SELECT `Text` 
FROM `content` 
WHERE `ResourceKey` = 'Test' 
AND `Language` ΙΝ ('en-GB', 'nl-NL') 
ORDER BY if (`Language` = 'en-GB', 1, 2) 
LIMIT 1 
+1

することにより、このコードスニペットは、/([説明を含む]の質問を解決することができるが/meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)は本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。また、コードと説明の両方の可読性が低下するため、説明的なコメントを使用してコードを混乱させないようにしてください。 – FrankerZ

+0

ときどき1 + 1 = 2ではない理由を説明するのが難しい場合があります:) – SIDU

+0

私は@ giorgosの回答を受け入れています。なぜなら彼の説明は明白でINはMySQLの私のバージョンでは動作しないからです。 –

関連する問題