我有一个支持一种或多种语言的实体列表。 我有一个父实体,它也有一个必需的语言列表。 我想知道所有孩子不支持的父项所需的语言。
即: 表1:
Lang_ID, ChildContent_ID
1 A
2 B
3 B
1 B
1 C
3 C
4 C
1 D
3 D
1 E
表2:
ParentRequiredLang_IDs
1
2
3
在上面的数据中,我们看到所有孩子都有语言1支持,但只有B,C,D有语言3支持。只有B有语言2支持。父母需要语言1,2,3支持,但在儿童中缺少2和3。这是我想要的输出; 2,3。
Desired output:
2
3
如何撰写此查询?
注意:这里的两个表都是几个连接的输出,应该是动态的。我无法查询“2”和“3”。
答案 0 :(得分:1)
这是一种方法。首先创建内容ID和所需语言的CROSS JOIN(以获取所需的所有组合),然后只需查找缺失值并输出它们的不同语言ID。
SELECT
DISTINCT ParentRequiredLang_IDs AS MissingLanguages
FROM
(SELECT i.ChildContent_ID, j.ParentRequiredLang_IDs FROM Table_1 i CROSS JOIN Table_2 j) a
LEFT OUTER JOIN
dbo.Table_1 b ON a.ChildContent_ID = b.ChildContent_ID AND a.ParentRequiredLang_IDs = b.Lang_ID
WHERE
b.Lang_ID IS NULL