我有asqlite3数据库和三个表。示例数据如下所示:
原件
id aName code
------------------
1 dog DG
2 cat CT
3 bat BT
4 badger BDGR
... ... ...
翻译
id orgID isTranslated langID aName
----------------------------------------------
1 2 1 3 katze
2 1 1 3 hund
3 3 0 3 (NULL)
4 4 1 3 dachs
... ... ... ... ...
冗长的
id Langcode
-----------
1 FR
2 CZ
3 DE
4 RU
... ...
我想从原始表中选择所有数据,并按这样的方式转换,结果将包含原始表中的所有数据,但得到转换的行的aname将替换为来自转换表的aname,这样我就可以应用order by子句并按所需的方式对数据排序。
所有的数据和表格设计都只是为了说明问题。架构确实包含一些元素,如不翻译的列或翻译以及单独表中的原始名称。这些元素是应用程序目标/设计所必需的。
更具体地说,这是我要生成的一个行集示例。它是来自原始表的所有数据,如果可以从原始表的某个id进行转换,则这些数据将被来自转换表的数据修改。
期望结果
id aName code isTranslated
---------------------------------
1 hund DG 1
2 katze CT 1
3 bat BT 0
4 dachs BDGR 1
... ... ... ...
最佳答案
这是CASE expression的典型应用:
SELECT Original.id,
CASE isTranslated
WHEN 1 THEN Translated.aName
ELSE Original.aName
END AS aName,
code,
isTranslated
FROM Original
JOIN Translated ON Original.id = Translated.orgID
WHERE Translated.langID = (SELECT id FROM Lang WHERE Langcode = 'DE')
如果并非
Original
中的所有记录在Translated
中都有相应的记录,请改用LEFT JOIN
。如果保证未翻译的名称是
NULL
,则可以改用IFNULL(Translated.aName, Original.aName)
。关于sql - 如何进行SQL查询,以在SQLite中的特定条件下将一个表的结果行与另一表的行合并,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12612482/