1

私は、各 SQL クエリがうまく機能するケースの 1 つを持っていますが、それらを一緒に貼り付けるとうまくいきません。

私は2つのテーブルを持っています。1 つは、NULL 値を許可する動的です。もう 1 つは、ユーザーに質問を提供することで、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 とどのように異なるかを判断しようとしています。それが機能することは理にかなっているように見えますが、明らかに、動的リストと静的テキストとは何かが異なります。

編集:ありがとう!私は物事を考えすぎていたと思います。文字列リストにせず、オブジェクトのままにすることで、すぐに機能しました。

4

3 に答える 3

1

IN 句は、カンマ区切り値の文字列ではなく、一時テーブルを想定しています。

select * FROM questions_table WHERE questioncolumn IN   
select column_name from
information_schema.columns where table_name='dynamic_table';
于 2013-05-04T22:29:12.343 に答える