【发布时间】:2010-04-01 14:53:24
【问题描述】:
基本上,我有两个表,表 A 包含我想拿出的实际项目,表 B 用于语言翻译。
因此,例如,表 A 包含实际内容。任何时候在表中使用文本,而不是存储实际的 varchar 值,都会存储与存储在表 B 中的文本相关的 id。这允许我通过向表 B 添加一个 languageID 列,对同一行中的同一行进行多个翻译数据库。
例子:
表 A
- 标题(整数)
- 说明(整数)
- 其他数据....
表 B
- TextID (int) - 这是列 其值存储在其他表中
- 语言 ID(整数)
- 文本(varchar)
我的问题更多的是关于如何最好地处理这个问题的建议。理想情况下,我想要一个可以用来从表中选择的查询,并从表中获取文本而不是文本的 id。目前,当我在表格中有两个文本项时,我会这样做:
SELECT C.ID, C.Title, D.Text AS Description
FROM
(SELECT A.ID, A.Description, B.Text AS Title
FROM TableA A, TranslationsTable B
WHERE A.Title = B.TextID AND B.LanguaugeID = 1) C
LEFT JOIN TranslationsTable D
ON C.Description = D.TextID AND D.LanguaugeID = 1
此查询为我提供了我正在查找的表 A 中的行(使用内部 select 语句中的 where 语句)以及基于使用的语言 ID 而不是文本 ID 的实际文本。
当我只使用一个或两个需要翻译的文本项时,这很好用,但添加第三个或更多项时,它开始变得非常混乱 - 基本上是示例顶部的另一个左连接。
对更好的查询有什么建议,或者至少是在一行中处理 3 个或更多文本项的好方法?
根据建议,我添加了两个表的示例:
Table A
---------------------------
ID |Title |Description
---------------------------
1 |1 |2
---------------------------
2 |3 |4
---------------------------
Table B (Translations Table)
---------------------------
ID |LanguaugeID|Text
---------------------------
1 |1 |Here is title one
---------------------------
1 |2 |Here is a title one in espanol
---------------------------
2 |1 |Here is description one
---------------------------
2 |2 |Here is description one in espanol
---------------------------
3 |1 |Title 2
---------------------------
4 |1 |Description 2
---------------------------
我想要的是能够从表 A 中提取一行,该行已经包含表 B 中的文本,而不仅仅是 id - 并且能够为需要翻译的几个列执行此操作。
【问题讨论】:
-
你能澄清这个问题吗?您不断在谈论表 A/表 B 和实际表名之间来回切换,这使得这真的很混乱。您可以在整个问题中仅引用实际的表名吗?您还可以引用示例查询中不在表 (ID) 中的字段。最后,如果您在每个表中显示一些示例行和预期的输出,将会有所帮助。
-
如果有帮助,只需添加表格示例
标签: sql sql-server database tsql