我有table1
c1 c2
1 a
1 b
1 c
2 a
3 b
和table2
c3
a
h
y
我需要过滤所有c1
,即使c2
中的一个包含来自table2的任何c3
结果应该是
c1
3
到目前为止,我试过
with cte as(
select c1, collect_set(c2) as c2
from table1
)
但是我无法以这样的方式加入table2,这样我就可以过滤掉我不需要的原始内容。例如,使用
select c1
from cte
cross join table2
我可以过滤像
这样的原始内容1 (a, b, c) a
但不是
1 (a, b, c) x
然后我会得到
2 (a) x
我根本不需要。
我还考虑过结合
select c1, concat_ws(',', c2)
并使用like '%c3%'
,但c3
是一个包含许多值而非某些字符串的列。
NOT EXISTS
无法正常工作
有办法吗?
答案 0 :(得分:2)
我想你想要这样的东西:
select t1.c1
from table1 t1 left join
table2 t2
on t1.c2 = t2.c3
group by t1.c1
having count(t2.c3) = 0;
答案 1 :(得分:-1)
请查看戈登的答案,找出更合适,更好的解决方案。
SELECT [c1]
FROM @table1
WHERE [c1] NOT IN ( SELECT [c1]
FROM @table1
INNER JOIN @table2 ON c2 = c3 );