如何在Databricks Spark SQL中向IN子句传入数组实现关联查询?
解决数组列与单字段匹配的SQL查询问题
你的原SQL存在两个问题:
- 错误引用了表B的
b.animals,实际应该使用表A的a.animals IN操作符无法直接处理数组类型,需要用数组专用的匹配逻辑
下面是两种可行的修正方案:
方案一:使用ANY操作符(适合PostgreSQL等支持数组的数据库)
WITH table_a AS ( SELECT id, array('cat','dog') AS animals ) SELECT b.* FROM table_b b JOIN table_a a ON a.id = b.id AND b.animal_type = ANY(a.animals)
= ANY(a.animals)会直接检查b.animal_type是否等于数组中的任意元素,写法简洁高效。
方案二:展开数组后关联(兼容性更强)
如果你的数据库不支持数组直接匹配,可以先把数组拆成多行再做关联:
WITH table_a AS ( SELECT id, array('cat','dog') AS animals ) SELECT b.* FROM table_b b JOIN ( SELECT id, unnest(animals) AS animal FROM table_a ) a ON a.id = b.id AND a.animal = b.animal_type
这里用unnest把数组展开为单值行,再和表B做常规的等值关联,适配多数数据库类型。
内容的提问来源于stack exchange,提问作者Fubudis
相关产品推荐
相关产品推荐

