使用另一个表过滤表的SQL查询

Ste*_*enP 1 sql t-sql select filter sql-server-2008

我目前有2个SQL表,如下所示:

数据表

和...

过滤表

我需要编写一个SELECT语句来检索DataTable中包含与FilterTable匹配的行的所有产品.

所以基于我上面的示例表,如果我要运行查询,它将返回以下结果:

结果表

我最近发现了一个问题,那种尝试: SQL查询连接中的所有记录都匹配条件? 但是在实现类似的东西方面却没有成功

注意 - 我正在使用Microsoft SQL Server 2008

sge*_*des 8

这有点复杂,但这是一个解决方案.基本上你需要检查数据表中有多少记录匹配来自filtertable的所有记录.这使用子查询来做到这一点:

SELECT *
FROM DataTable
WHERE ID IN (
  SELECT DT.ID
  FROM DataTable DT
    JOIN FilterTable FT ON FT.Name = DT.Name 
          AND FT.Value = DT.VALUE
  GROUP BY DT.ID
  HAVING COUNT(*) = (SELECT COUNT(*) FROM FilterTable)
)  
Run Code Online (Sandbox Code Playgroud)