假设我们有两个表Foo和Bar。对于Foos和Bars之间的多对多关系,我有一个关联表Foo_Bar。查询中的SQL动态
现在我基本上想要一个查询来选择匹配动态条数限制的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,但我想知道如果动态查询是为了达到预期的效果的唯一合理的可移植的方法。
你可以做'JOIN foo_bar这样FB1 ON FB1.FooId = F.Id WHERE FB1.BarId IN(Y,Z, ....)' – Lamak
不完全。见下面我对Dancrumb的回复。 – naasking