首页 > 解决方案 > 查询不读取存储在表中的引用字符串值

问题描述

我将一些引用的值存储在一个单独的表中,并基于此表中的值。我正在尝试通过在子查询中使用此表中的值来过滤另一个表中的行。但它没有读取子查询的值并在输出中返回一个空白表。

该值在列中override并解析为 'HCC11','HCC12'

当我只是从列中复制值并将其粘贴到子查询的位置时,它正在正确地获取数据。我无法理解这里的问题。我已经尝试在trim()这里使用该功能,但仍然无法正常工作

注意-:我附上了图片供您参考:

在此处输入图像描述

select * 
from table1 
where column1 in (select override  from table 2 )

标签: sqlstringpostgresqlquotes

解决方案


将逗号分隔的值存储在单个列中是一个非常糟糕的数据库,首先将它们括在引号中会使事情变得更糟。解决问题的正确方法是更好的设计。

但是,如果您被迫使用这种糟糕的设计,您可以使用将它们转换为正确的值列表

select *
from table1
where column1 in (select trim(both '''' from w.word)
                  from table2 t2
                    cross join unnest(string_to_array(t2.override, ',')) as w(word)

这假设table1.column1只包含一个没有任何引号的值,并且覆盖值从不包含实际值中的逗号(例如,上面的值会中断类似 的值'A,B', 'C'


推荐阅读