查询包含具有一些共同父项的所有结果

时间:2018-04-17 06:13:22

标签: sql sql-server

我正在尝试查询具有不同父母共同点的所有结果。我只需要那些价值观。

例如,我们有两个表:Models和Items(当然还有一个链表,ItemsInModel)。所有项目都有一个模型,反之亦然。所以现在我需要一个查询来查询一个或多个模型的所有常用项目。

换句话说,我需要使用与IN语句相反的方法(因为IN使用OR)。我们需要一个动态AND,以便查询可以是:

Select * 
from Items i 
join ItemsInModel iim on iim.itemId = i.id 
join Models m on iim.modelId = m.id 
WHERE m.id = X AND m.id = Y AND m.id = Z

如果我们有一个模型ID列表,有没有办法查询所有常用项?

1 个答案:

答案 0 :(得分:1)

你可以试试这个。它返回所有模型中使用的最常见项目。

SELECT * FROM Items i 
WHERE i.id IN (
    SELECT TOP 1 WITH TIES iim.itemId
    FROM 
        ItemsInModel iim 
    GROUP BY 
        iim.itemId
    ORDER BY COUNT(DISTINCT iim.modelId) DESC
)