假設我們有兩個表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