ホームページ > データベース > mysql チュートリアル > PostgreSQL 関数から返される列が連結されるのはなぜですか?それを修正するにはどうすればよいですか?

PostgreSQL 関数から返される列が連結されるのはなぜですか?それを修正するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-27 01:38:14
オリジナル
342 人が閲覧しました

Why Are My PostgreSQL Function's Returned Columns Concatenated, and How Can I Fix It?

関数から返されたレコードには連結された列があります

関数を利用して特定の目的でデータを取得する場合、返されるレコードの列が 1 つの列に連結されます。これは、関数が別のクエリ内のサブクエリとして使用されている場合に発生する可能性があります。

関数の結果について

関数から返された行を分解して個々の列を取得するには、次のようにします。関数を個別に実行するだけです:

SELECT * FROM account_servicetier_for_day(20424, '2014-08-12');
ログイン後にコピー

これにより、期待される列形式の出力が提供されます。 Structure.

元のクエリのアドレス指定

元のクエリの問題を解決するには、使用されている PostgreSQL のバージョンに応じて複数のアプローチがあります。

PostgreSQL 9.3 以降

使用JOIN LATERAL を使用してサブクエリを接続し、行構造を保持します。

SELECT '2014-08-12' AS day, 0 AS inbytes, 0 AS outbytes
     , a.username, a.accountid, a.userid
     , f.*   -- but avoid duplicate column names!
FROM   account_tab a
     , account_servicetier_for_day(a.accountid, '2014-08-12') f  -- <-- HERE
WHERE  a.isdsl = 1
AND    a.dslservicetypeid IS NOT NULL
AND    NOT EXISTS (
   SELECT FROM dailyaccounting_tab
   WHERE  day = '2014-08-12'
   AND    accountid = a.accountid
   )
ORDER  BY a.username;
ログイン後にコピー

PostgreSQL 9.2 以降

サブクエリを使用して関数を呼び出し、行を分解します。外部クエリ:

SELECT '2014-08-12' AS day, 0 AS inbytes, 0 AS outbytes
     , a.username, a.accountid, a.userid
     , (a.rec).*   -- but be wary of duplicate column names!
FROM  (
   SELECT *, account_servicetier_for_day(a.accountid, '2014-08-12') AS rec
   FROM   account_tab a
   WHERE  a.isdsl = 1
   AND    a.dslservicetypeid Is Not Null
   AND    NOT EXISTS (
       SELECT FROM dailyaccounting_tab
       WHERE  day = '2014-08-12'
       AND    accountid = a.accountid
      )
   ) a
ORDER  BY a.username;
ログイン後にコピー

どちらのアプローチでも、潜在的な重複列に注意してください。分解された行を選択するときの名前。

以上がPostgreSQL 関数から返される列が連結されるのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート