我有三个表,我想连接在一起并产生缺少翻译的输出。
-----------------------------
Table 1 - Languages
-----------------------------
LanguageID Name
-----------------------------
Table 2 - Phrase
-----------------------------
PhraseID Text
----------------------------------------------------------
Table 3 - Transaltion
----------------------------------------------------------
TranslationID PhraseID LanguageID Text
我尝试创建一个Sql Query,它返回每个短语的所有语言,并显示是否有翻译,但下面的代码。然而,它不输出我想要的,输出仅显示翻译中存在的记录。以下代码就是我一直在玩的。
SELECT
P.PhraseID
,L.LanguageID
,T.TranslationID
FROM
Phrase P
LEFT JOIN Translation T ON T.PhraseID = P.PhraseID
RIGHT OUTER JOIN [Language] L ON T.LanguageID = L.LanguageID OR L.LanguageID IS NULL
我可能错过了一些简单的事情。但希望有人能指出我正确的方向。
编辑:
预期输出
----------------------------------------------------------
Phrase ID Language ID TranslationID
----------------------------------------------------------
1 1 1
1 2 NULL <--- Missing translation
解决方案:
SELECT
P.PhraseID,
L.LanguageID,
T.TranslationID
FROM [Language] L
CROSS JOIN Phrase P
LEFT JOIN Translation T ON T.LanguageID = L.LanguageID AND T.PhraseID = P.PhraseID
WHERE P.[Text] = 'Barcode'
答案 0 :(得分:2)
以下是获取翻译缺失的一种方法:
select p.PhraseID, l.LanguageID
from languages l cross join
phrases p left join
translations t
on t.LanguageID = l.LanguageID and t.PhraseID = p.PhraseId
where t.LanguageId is null;
这是如何工作的? cross join
生成语言和短语的所有组合。 left join
找到与现有翻译匹配的内容。 where
过滤了匹配项。瞧!一切都不匹配。