假设我们有两个表 Foo 和 Bar。我有一个关联表 Foo_Bar 用于 Foos 和 Bars 之间的多对多关系。
现在我基本上想要一个查询来选择与动态数量的 Bar 约束匹配的 Foos。我可以通过使用适当数量的连接动态生成查询来做到这一点:
SELECT *
FROM Foo F INNER JOIN
Foo_Bar FB1 ON FB1.FooId = F.Id AND FB1.BarId= Y INNER JOIN
Foo_Bar FB2 ON FB2.FooId = F.Id AND FB2.BarId= Z INNER JOIN
--one inner join for each constraint
我想知道是否有更简单的方法。我基本上想要这样的查询:
SELECT *
FROM Foo F
WHERE (Y, Z, ...) IN (SELECT BarId FROM Foo_Bar WHERE FooId = F.Id)
当然,这不是有效的 SQL,但我想知道动态查询是否是实现所需结果的唯一合理可移植的方式。