我正在尝试执行一个简单的IF,否则IF语句,这在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 version: 1.1.8 Protocol version: 10
发布于 2017-01-24 15:36:22
如果您希望从查询中获得一条记录,则不需要为此使用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'的记录。
发布于 2017-01-24 23:47:42
SELECT `Text`
FROM `content`
WHERE `ResourceKey` = 'Test'
AND `Language` ΙΝ ('en-GB', 'nl-NL')
ORDER BY if (`Language` = 'en-GB', 1, 2)
LIMIT 1https://stackoverflow.com/questions/41832095
复制相似问题