一尘不染

SQL列名称并将其与PostgreSQL中另一个表中的行记录进行比较

sql

在其中一种情况下,每个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有何不同。似乎可行,但显然与动态列表和静态文本有所不同。

编辑:谢谢!我想我正在思考问题。通过不将其制成字符串列表并保留其对象,它可以立即工作。


阅读 133

收藏
2021-05-16

共1个答案

一尘不染

我认为这可能是您要寻找的:

select * 
FROM questions_table 
WHERE questioncolumn IN
(
  select column_name 
  from information_schema.columns where table_name='dynamic_table'
);

SQL小提琴演示

2021-05-16