sql - 查询及物词翻译
问题描述
我在构建我猜应该是 CTE 查询时遇到了麻烦,它会返回一个单词翻译。
我有两张桌子 - 单词:
ID | WORD | LANG
1 'Cat' 'ENG'
2 'Kot' 'POL'
3 'Katze' 'GER'
和连接:
ID | WORD_A | WORD_B
1 1 2
2 1 3
由于已经存在 ENG->POL 和 ENG->GER 翻译,我希望收到 POL->GER 翻译。
所以对于任何给定的单词,我必须检查它的连接翻译,如果目标语言不存在,我应该检查这些连接翻译的连接翻译等,直到找到任何一个翻译,或者什么都不返回;
我不知道从哪里开始,如果需要恒定数量的转换不会有问题,但它也可能需要像 POL->ITA->...->ENG->GER 这样的转换。
解决方案
我建议将您的表格设计更改为以下内容:
ID | WORD_ID | WORD | LANG
1 | 1 | 'Cat' | 'ENG'
2 | 1 | 'Kot' | 'POL'
3 | 1 | 'Katze' | 'GER'
现在假设您想从波兰语转到德语,并且从波兰语单词 cat 开始Kot
。然后,您可以使用以下查询:
SELECT t2.WORD
FROM yourTable t1
INNER JOIN yourTable t2
ON t1.WORD_ID = t1.WORD_ID AND t2.LANG = 'GER'
WHERE
t1.WORD = 'Kot' AND t1.LANG = 'POL'
演示
这里的想法是您希望您的一个表维护每个逻辑上不同的单词到某个公共 id 或引用的映射。然后,您只需要输入的单词和语言以及所需的输出语言即可进行映射。
注意:为简单起见,我只展示了一个包含多种语言的单个单词的表格,但逻辑仍应适用于多种单词和语言。您当前的表格可能未标准化,但优化这可能是与您的直接问题不同的另一项任务。
推荐阅读
- python - 由于内存,关闭python脚本中的选项卡
- python - 2个dna序列python的点图(不导入)
- angular - Angular 7 - 您可以在订阅中调用“本地”方法吗?
- reactjs - GraphQL 查询返回未定义但在我刷新页面时工作正常?
- rust - 为什么我的 rust 代码无法加载 tera 模板?
- sql - 如何将包体和规范导入/导出到 .sql 或 .pkb 文件中
- c# - 将类型作为变量传递,然后使用它
- spring-boot - CamelHttp 多部分/表单数据上传。camel-http4 和 camel-http-starter 之间的变化
- r - 从列中获取特定于“NA”值的预测
- python - 在while循环中删除数据框中的最后一列