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

标签 sql sql-server-2008 tsql select filter

我目前有 2 个 SQL 表,如下所示:
Data Table
和...
filter table
我需要编写一个 SELECT 语句,从包含与 FilterTable 匹配的行的 DataTable 中检索所有产品。
因此,根据我上面的示例表,如果我要运行查询,它将返回以下结果:
Result table
我最近发现了一个尝试这样的问题:
SQL query where ALL records in a join match a condition?
但未能成功实现类似的事情
注意 - 我使用的是 Microsoft SQL Server 2008

最佳答案

这有点复杂,但这里有一个解决方案。基本上,您需要检查数据表中有多少记录与过滤表中的所有记录匹配。这使用子查询来做到这一点:

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)
)  
  • SQL Fiddle Demo
  • 关于使用另一个表过滤一个表的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18862004/

    相关文章:

    sql - Postgresql 串行每日记录计数

    mysql - 从表中的所有列中选择所有非空值

    jquery - db查询时如何处理随机字母大小写实例?

    c# - SQL Server 2008 的墓碑问题

    c# - 如何在 SQL CLR 项目中访问 WMI

    sql-server - 如何将动态 sql 插入临时表?

    mysql - 根据多边形的纬度、经度坐标从mysql数据库中选择行

    sql-server-2005 - TSQL INTERSECT 关键字

    sql-server - SQL Server 2012 中的 VLOOKUP 样式查找

    sql - 大表中的行数