根据字段内容更改为一个选择的WHERE上只有一行
-
22-08-2019 - |
题
好吧,这听起来可能有点不可思议,但我需要做的就是简单。我公司的名单,每一个都有说明。该网站是在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场递增并插入一个在一个临时表中的结果之一,同时,但有这样做的没有更好的办法?
解决方案
此将工作,除非有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
这也不会与英文/备用版本,如果只是定位的变体的部分缺失替换整个地址。只缺失的部分将被取代。
不隶属于 StackOverflow