当前位置:  开发笔记 > 数据库 > 正文

根据字段内容,仅在一行上更改选择的WHERE

如何解决《根据字段内容,仅在一行上更改选择的WHERE》经验,为你挑选了1个好方法。

好吧,这听起来有点奇怪,但我需要做的很简单.我有一个公司列表,每个公司都有一个描述.该网站有4种语言版本.我的问题来自于我用英语列出一家公司,但负责翻译法语的人仍然没有翻译,所以我有一个简单的说法:

SELECT TOP(6)
    company.name,
    company.description,
    company.address
WHERE
    langid=1
ORDER BY
    company.id DESC

真正的查询更复杂,但我认为用这个来理解问题会更容易.我需要做的是,当langid 2中的描述为空时,然后向我显示langid 1,因为langid 1总是第一个将被添加的.我不想将描述字段显示为空.

想象第1行,第2行,第3行和第5行都有langid 2的描述,但没有第4行和第6行的描述.我需要为包含它的行显示langid 2,但对于没有描述的行,则需要langid 1.

我知道我可能会用@i字段递增并在临时表中逐个插入结果,但有没有更好的方法呢?



1> Tomalak..:

这将起作用,除非lng1.name缺少等等(即英语/后备变体).

SELECT TOP(6) 
  COALESCE(lng2.name, lng1.name)               [name], 
  COALESCE(lng2.description, lng1.description) description, 
  COALESCE(lng2.address , lng1.address )       address
FROM 
  company lng1
  LEFT JOIN company lng2 ON 
    lng1.id     = lng2.id AND
    lng1.langid = 1 AND
    lng2.langid = 2  /* your "foreign language" id, e.g. a parameter */
WHERE
  lng1.id IN (1,2,3,4,5,6)  /* or whatever */
ORDER BY 
  lng1.id DESC

如果只缺少部分本地化变体,它也不会用英文/后备版本替换整个地址.只有缺失的部分将被替换.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有