作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试执行一个简单的 IF、ELSE IF、ELSE 语句,这在 SQL 中相当容易。由于某种原因它不会在 MySQL 中听我的。它一直告诉我“阅读该死的手册”,尽管手册是:https://dev.mysql.com/doc/refman/5.7/en/exists-and-not-exists-subqueries.html
没有说明如何在 SELECT 部分中执行此操作,仅在 where 之后说明,我认为这意味着我无法按照习惯的方式执行此操作。剩下的问题是,我该怎么做?
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 版本:1.1.8
协议(protocol)版本:10
最佳答案
如果您期望查询中包含一条记录,则无需为此使用 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'
的记录。
关于MySQL 查询 IF EXISTS ELSE IF ELSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41832095/
我是一名优秀的程序员,十分优秀!