首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL条件Where子句

问MySQL条件Where子句
EN

Stack Overflow用户
提问于 2010-11-20 00:31:00
回答 3查看 1.9K关注 0票数 3

我正在尝试根据所选的特定语言在单个查询中输出列表。但我需要做的是,如果列表对于所选语言不可用,那么它将返回英文列表。

因此,如果英语为'en‘,日语为'jp',则以下代码当前返回日语列表:

代码语言:javascript
复制
SELECT * 
FROM listings LS
LEFT JOIN listing_langs LANG ON LS.listing_id = LANG.listing_id
WHERE LANG.language = 'jp'

我正在尝试在MySQL中设置查询,使其首先查找: LANG.language = 'jp',并返回日语列表(就像现在一样),但如果结果为空,则查找: LANG.language = 'en‘,如果存在,则返回英文列表。

因此,基本上,如果日语列表存在,则返回日语列表,但如果不存在,则默认使用英语列表。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-20 02:12:28

你可以像这样做:

代码语言:javascript
复制
SELECT * 
FROM listings LS
LEFT JOIN listing_langs LANG ON (LS.listing_id = LANG.listing_id AND LANG.language = 'jp' OR 
    (NOT EXISTS (SELECT 1 FROM listing_langs WHERE listing_langs.listing_id = LS.listing_id AND listing_langs.language = 'jp') AND LANG.language = 'en')

也就是说,显式地检查联接以查看是否没有用于jp的行,如果没有,则使用en。

这是一个巨大的丑陋,但它确实简洁地捕捉到了你想要做的事情的本质。

票数 1
EN

Stack Overflow用户

发布于 2010-11-20 00:49:38

代码语言:javascript
复制
SELECT        * 
FROM          listings LS
  LEFT JOIN   listing_langs LANG
  ON          LS.listing_id = LANG.listing_id
WHERE         LANG.language = IFNULL(SELECT language FROM listing_langs WHERE language = 'jp','en')

无需测试(或能够测试),我认为mysql中的IFNULL命令应该可以很好地做到这一点。

票数 0
EN

Stack Overflow用户

发布于 2010-11-20 00:50:56

你为什么不这么做呢

代码语言:javascript
复制
(SELECT *, 1 as grade  
FROM listings LS  
LEFT JOIN listing_langs LANG ON LS.listing_id = LANG.listing_id  
WHERE LANG.language = 'jp')   
UNION  
(SELECT *, 2 as grade   
FROM listings LS  
LEFT JOIN listing_langs LANG ON LS.listing_id = LANG.listing_id  
WHERE LANG.language = 'en')  
ORDER BY grade LIMIT 1

如果jp存在,则始终只有一行;否则,如果它不存在,则为en。

对于之前的错误,我很抱歉。

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

https://stackoverflow.com/questions/4227116

复制
相关文章

相似问题

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