我有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/

10-15 17:24