You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何将子查询整合到ANY运算符实现查询合并?

问题解决:动态生成食材匹配数组的SQL修正

原硬编码食材模糊匹配的SQL可以正确返回结果,但通过string_agg动态生成匹配字符串后返回0条结果,核心原因是类型不匹配:

  • 原查询中ANY('{%yeast%, ...}')使用的是PostgreSQL的数组类型,ANY会遍历数组中的每个元素做匹配
  • string_agg返回的是单个字符串,即使手动拼接{},它依然是字符串类型,ANY会把整个字符串当成一个匹配模式,而非多个独立模式,导致匹配失败

解决方案1:直接生成数组(推荐)

用array_agg替代string_agg,直接生成PostgreSQL数组类型,让ANY可以正确遍历匹配:

SELECT *
FROM receipts 
WHERE true = ALL(
    SELECT name ~~* ANY(
        SELECT array_agg('%' || name || '%') 
        FROM home_ingredients
    )
    FROM ingredients 
    WHERE ingredients.receipt_id = receipts.id
)

解决方案2:将字符串转换为数组

如果需要保留string_agg,可以用string_to_array将生成的字符串转换为数组,注意分隔符要和string_agg的分隔符一致(这里是, ):

SELECT *
FROM receipts 
WHERE true = ALL(
    SELECT name ~~* ANY(
        SELECT string_to_array(string_agg('%' || name || '%', ', '), ', ') 
        FROM home_ingredients
    )
    FROM ingredients 
    WHERE ingredients.receipt_id = receipts.id
)

内容的提问来源于stack exchange,提问作者Boti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:45:00