我目前有 2 个 SQL 表,如下所示:
和...
我需要编写一个 SELECT 语句,从包含与 FilterTable 匹配的行的 DataTable 中检索所有产品。
因此,根据我上面的示例表,如果我要运行查询,它将返回以下结果:
我最近发现了一个尝试这样的问题:
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 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18862004/