首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否存在MySQL查询

问是否存在MySQL查询
EN

Stack Overflow用户
提问于 2017-01-24 15:32:23
回答 2查看 842关注 0票数 0

我正在尝试执行一个简单的IF,否则IF语句,这在SQL中相当容易。出于某种原因,它不会在MySQL上听我的话。它一直告诉我“看他妈的手册”还有手册:https://dev.mysql.com/doc/refman/5.7/en/exists-and-not-exists-subqueries.html

不说明如何在SELECT部分中这样做,只在where之后,这意味着我不能以我习惯的方式来做这件事。剩下的问题是,那我该怎么做呢?

代码语言:javascript
复制
    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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-24 15:36:22

如果您希望从查询中获得一条记录,则不需要为此使用IF ELSE语句。试一试:

代码语言:javascript
复制
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

如果您希望始终返回某些文本,即使没有返回记录,则请使用:

代码语言:javascript
复制
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'的记录。

票数 1
EN

Stack Overflow用户

发布于 2017-01-24 23:47:42

代码语言:javascript
复制
SELECT `Text` 
FROM `content` 
WHERE `ResourceKey` = 'Test'
AND `Language` ΙΝ ('en-GB', 'nl-NL')
ORDER BY if (`Language` = 'en-GB', 1, 2)
LIMIT 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41832095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档