2015-07-20 58 views
0

我有一個具有唯一ID和兩列a和b的關係表,它們都是外鍵給兩個實體表A和B.這種關係很多許多A和B之間,這樣的關係表的工作,現在的方式是,有有與表B中的不同元素,如表A的第一個元素的多行:查詢返回與特定列中的許多值關聯的行

<1>, <A1>, <B1> 

    <2>, <A1>, <B5> 

    <3>, <A1>, <B3> 

    <4>, <A1>, <B150> 

    <5>, <A1>, <B12> 

    <6>, <A2>, <B72> 

    . . . 

現在我需要一個查詢,爲我提供了類型A的元素,它們具有包含集合中所有值的對應行。所以選擇一個FROM表中的b(B3,B17,...,B178)不是我想要的)。 原因是這個簡單的查詢返回具有任何一個值的行,但正如在我的問題中,我想要A行中具有所有輸入集合中的b值的行(B3,B17,... ,B178)。 換句話說,當GROUP BY a等於輸入集時,只有列b的GROUP_CONCAT所在的行。

另外也許可以提一下,這個輸入集合以2個值開始,但是會在我的算法的每個階段增長,因此在最壞的情況下它可能具有列b的所有可能值(雖然這個特定查詢的結果對於最壞的情況最可能是空)。

回答

0

使用group byhaving

SELECT a 
FROM table 
WHERE b IN (B3, B17, ..., B178) 
GROUP BY a 
HAVING COUNT(*) = <number of elements in the list>; 

如果你的表可以有重複的,那麼你要COUNT(DISTINCT b)

+0

感謝您對Gordon的快速回復。 據我所知,IN有一個功能,可以返回任何與列b上任何值匹配的行。 現在只是爲了確保您的回覆,查詢的HAVING部分負責確保所有值都符合,正確嗎? –

+0

@ArmanDidandeh。 。 。 「由......組成」和「擁有」。 –

+0

非常感謝。我會在大約10小時後嘗試(這是深夜,我剛回到家)。 –

相關問題