我有一种情况,每个 SQL 查询都很好,但当我将它们粘贴在一起时就不行了。
我有两张桌子。一种是动态的,允许 NULL 值。另一个通过向用户提供问题来帮助填充空值。我从动态表中获取列名,看看是否可以让它们与其他问题表中的字段匹配。目前,我们有这个工作的 PHP,但我一直在尝试将它全部放入我们的 PostgreSQL 数据库中。
这会从动态表中获取所有列名并返回逗号分隔的字符串列表。
select array_to_string(array_agg(quote_literal(column_name::text)),',') from
information_schema.columns where table_name='dynamic_table';
它工作得很好,并返回类似:'notificationemail','birthdate','lastnotificationcheck','createmethod'
如果我将此列表直接粘贴到我的下一个查询中,它会起作用并返回行:
select * FROM questions_table WHERE questioncolumn IN
('notificationemail','birthdate','lastnotificationcheck','createmethod');
现在,一旦我将它们粘贴在一起,我就会得到一些运行但不返回行的东西:
select * FROM questions_table WHERE questioncolumn IN
(select array_to_string(array_agg(quote_literal(column_name::text)),',') from
information_schema.columns where table_name='dynamic_table');
我试图确定静态文本字段与 IN 语句中嵌入的 SELECT 有何不同。它似乎是有道理的,但显然,动态列表和静态文本有所不同。
编辑:谢谢!我想我想太多了。通过不将其设为字符串列表并将其保留为对象,它立即起作用。