我有2个包含这样数据的表
元素
ID Type Value
------------------
1 Text AAA
2 Image BBB
3 Video CCC
文本
ItemID Language Text
------------------------
AAA English Hi There!
AAA French Hi There in french!
DDD English Some other text
我想创建一个select语句,当来自Type
表的Elements
是' Text' select语句将从Texts
表中提取文本值,文本必须限制为一个语言
所以结果将是
ID Type Value Text
-----------------------
1 Text AAA Hi There in French! ---This text is only the 'French' text
2 Image BBB NULL
3 Video CCC NULL
修改
我想我能做到这一点:
SELECT *,
CASE EE.[Type]
WHEN 'Text' THEN (
SELECT [Text] FROM Texts
WHERE ItemID=EE.Value
AND LanguageID='English'
) END as Text
FROM Elements EE
WHERE EE.ID = 1
你能想出更好的解决方案吗?
答案 0 :(得分:0)
为什么必须是一个案例?为什么不加入,最终游戏是什么?
SELECT type, value, language, text
FROM elements
LEFT JOIN texts ON value = itemID and elements.type = 'Text' and LanguageID='English'
答案 1 :(得分:0)
这也可以帮到你。
SELECT E.*,T.Texts
FROM [Elements] E
LEFT JOIN [Texts] T
ON E.Value = T.ItemID
WHERE T.Language = 'French'
答案 2 :(得分:0)
如果选择的语言基于用户选择,我会选择像以前的人一样的东西,但只是参数:
SELECT E.*,T.Texts
FROM [Elements] E
LEFT JOIN [Texts] T
ON E.Value = T.ItemID and T.Language = @Language
连接比子查询更快,也更容易读取。您应该尽可能避免使用子查询。如果您希望这样[使用CASE
],我会选择以下内容:
SELECT *,
CASE EE.[Type]
WHEN 'Text' THEN TT.Text
END as Text
FROM Elements EE
LEFT JOIN Texts TT on EE.Value = TT.ItemId and TT.Language = @Language