首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mysql。使用IF选择field=1或field=2的位置

Mysql。使用IF选择field=1或field=2的位置
EN

Stack Overflow用户
提问于 2013-01-18 16:27:28
回答 2查看 1.3K关注 0票数 0

我需要一些问题。

代码语言:javascript
运行
复制
CREATE TABLE `location_areas_localized` (
  `id` int(11) DEFAULT NULL,
  `lang_index` varchar(5) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  KEY `id` (`id`),
  KEY `lang_index` (`lang_index`),
  KEY `name` (`name`),
  FULLTEXT KEY `name_2` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


INSERT INTO `location_areas_localized` (`id`, `lang_index`,`name`)
VALUES
    (1,'ru','Нью Йорк'),
    (1,'en','New York'),
    (2,'en','Boston'),
    (2,'ch','波士顿')
;

搜索的逻辑。

如果找到包含lang_index='ru' AND id IN(1,2)的行。如果一个或多个具有lang_index='ru'的行不存在,但存在具有lang_index='en'和某个id的行,则必须返回all with lang_index='ru'。然后,它必须返回all exists with land_index='ru' AND id IN(1,2)和all and and not found with lang_index='ru'但found with lang_index='en' (在表中-所有具有lang_index='en'的行始终存在)

请参阅sqlfiddle

我只需要每个id一个结果。我试过按id分组,但它不能正常工作。

输出必须是

代码语言:javascript
运行
复制
  1,'ru','Нью Йорк'

   2,'en','Boston'   (because lang_index='ru' with id 2  not found)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-18 17:02:54

代码语言:javascript
运行
复制
SELECT 
  coalesce(max(CASE WHEN lang_index='ru' THEN name ELSE null END), name) as name
FROM 
  location_areas_localized 
WHERE 
  id IN (1,2) 
  AND (lang_index='en' OR lang_index='ru')
group by 
  id
ORDER BY 
  FIELD(lang_index,'ru','en');
票数 1
EN

Stack Overflow用户

发布于 2013-01-18 16:57:45

如果不使用聚合函数,它只需要第一个匹配的行。带有ORDER BY的子查询强制同一id的第一行是"ru“(如果不存在"ru”,则是"en“)。

代码语言:javascript
运行
复制
SELECT * 
FROM(
    SELECT *
    FROM location_areas_localized
    ORDER BY FIELD(lang_index,'ru','en','ch')
) as inv
WHERE id IN (1,2)
GROUP BY id

请参阅SQLFiddle示例

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14394980

复制
相关文章

相似问题

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