我有一个具有唯一ID和两列a和b的关系表,每列是两个实体表A和B的外键.A和B之间的关系是多对多的,所以关系表现在的工作方式是有许多行具有表A的元素与表B的不同元素,例如:
<1>, <A1>, <B1>
<2>, <A1>, <B5>
<3>, <A1>, <B3>
<4>, <A1>, <B150>
<5>, <A1>, <B12>
<6>, <A2>, <B72>
. . .
现在我需要一个查询,它给出了类型A的元素,它们具有包含集合中所有值的相应行。所以SELECT一个FROM表WHERE b IN(B3,B17,...,B178)不是我想要的。 原因是这个简单的查询返回具有任一值的行,但在我的问题中,我希望A实体在输入集中具有所有b值的行(B3,B17,..., B178)。 换句话说,只有当GROUP BY a等于输入集时,列b的GROUP_CONCAT行。
也许值得一提的是,这个输入集以2个值开始,但会在我的算法的每个阶段增长,所以在最坏的情况下,它可能具有列b的所有可能值(尽管这个特定查询的结果是最糟糕的情况很可能是空的。)
答案 0 :(得分:0)
使用group by
和having
:
SELECT a
FROM table
WHERE b IN (B3, B17, ..., B178)
GROUP BY a
HAVING COUNT(*) = <number of elements in the list>;
如果您的表格可能有重复项,那么您需要COUNT(DISTINCT b)
。