1
+---+---+
| A | B |
+---+---+
| 1 | 1 |
+---+---+
| 1 | 2 |
+---+---+
| 1 | 3 |
+---+---+
| 1 | 4 |
+---+---+
| 2 | 2 |
+---+---+
| 2 | 4 |
+---+---+
| 3 | 2 |
+---+---+
| 4 | 3 |
+---+---+

给定 B 中的一组值,我如何从 A 中选择所有 B 值共享的值?例如:

  • 值 1、2、3、4 应该返回 1
  • 值 2, 4 应该返回 1, 2
  • 值 1、2、3、4、5 应该返回一个空集

到目前为止,我有:

选择一个
从(表_A)
JOIN table_B ON A = A
其中 B = '1' 或 B = '2' 或 B = '3' 或 B = '4'

这显然与我的需要相去甚远。我真的很困惑,不知道该怎么做。

4

2 回答 2

0
select A 
from tableA
JOIN tableB ON tableA.A = tableB.A
where B in (1,2,3,4)
group by A
having count(distinct B) = 4

子句中的数字having需要是子句中元素的数量in

于 2012-09-26T17:47:19.357 回答
0

如果您可以保证这A, B是唯一的一组并且为此工作正常。

SELECT A 
FROM mytable
WHERE B in (1,2,3,4,5)
GROUP BY A
having count(*)=5;
于 2012-09-26T17:49:30.473 回答