update sql小提琴链接https://www.db-fiddle.com/f/9t63on5kywunrhqxkthb1p/4
输出应仅给出以下(表1的第2行)
I0016,I0028,I0045,I0056,I0215,I0321,I0361,I0369,I0420
我应该
select column1 from table1
where <any comma separated value in column1> not in
(select col2 from table2 where col1 = 'e')
可取的解决方案是本机SQL,没有特定于供应商的解决方案。如有必要,Spark SQL功能有帮助。
注意:我知道这是不好的设计,但这是我手中的。
Note 使用MySQL的默认设置创建了Fiddle中的表。我不知道如何在后端创建表。这就是为什么我指定这不应该特定于供应商。
您应该修复数据结构!在单列中存储值列表不是将数据存储在SQL中的合适方法。您应该使用连接/关联表。
您可以使用not exists
:
select t1.column1
from table1 t1
where not exists (select 1
from table2 t2
where ',' || t1.column || ',' like '%,' || t2.value || ',%'
)
SparkSQL也可以支持find_in_set()
,在这种情况下,您可以做:
select t1.column1
from table1 t1
where not exists (select 1
from table2 t2
where find_in_set(t1.column, t2.value) > 0
)
这是一个db&lt;>小提琴。
以下相关子查询适合我的情况。可以在上面的小提琴中进行测试。
select *
from table1 as t1
where (
select t2.col2
from table2 as t2
where t1.column1 like concat('%', t2.col2 ,'%')
and t2.col1 = 'e'
limit 1
) is NULL;