所以我试图按一个列分组的多行的值来过滤一个表,这些行匹配另一个表的多行,这些行按列分组。对于Exmaple:
###Table1###
+--------+-------+
| Symbol | Value |
+--------+-------+
| A | 1 |
| A | 2 |
| A | 3 |
| B | 9 |
| B | 8 |
+--------+-------+
###Table2###
+--------+-------+
| Symbol | Value |
+--------+-------+
| C | 9 |
| C | 8 |
| D | 1 |
| D | 2 |
| D | 4 |
| E | 9 |
| E | 8 |
| F | 1 |
| F | 2 |
| F | 3 |
+--------+-------+
查询需要返回C,E和F但不返回D,因为A的值与F的值匹配,B的值与C和E的值匹配。
我希望这是有道理的。
答案 0 :(得分:1)
您可以通过连接值的表格然后计算符号来获得匹配。对于您的数据,这应该有效:
select t2.symbol, t1.symbol
from (select t1.*, count(*) over (partition by symbol) as cnt
from table1 t1
) t1 join
table2 t2
on t1.value = t2.value
group by t1.symbol, t2.symbol, t1.cnt;
having count(*) = t1.cnt
这假定:
table2
中查找与table1
匹配的行,但table2
可能有table1
以外的其他值。