Rumah > pangkalan data > tutorial mysql > Mengapa Lajur Dikembalikan Fungsi PostgreSQL Saya Disatukan, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Lajur Dikembalikan Fungsi PostgreSQL Saya Disatukan, dan Bagaimana Saya Boleh Membetulkannya?

Mary-Kate Olsen
Lepaskan: 2024-12-27 01:38:14
asal
342 orang telah melayarinya

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

Rekod yang Dikembalikan daripada Fungsi Mempunyai Lajur Disatukan

Apabila menggunakan fungsi untuk mendapatkan semula data untuk tujuan tertentu, ia mungkin mendapati bahawa yang dikembalikan lajur rekod disatukan menjadi satu lajur. Ini boleh berlaku apabila fungsi digunakan sebagai subkueri dalam pertanyaan lain.

Memahami Hasil Fungsi

Untuk menguraikan baris yang dikembalikan daripada fungsi dan dapatkan lajur individu, hanya laksanakan fungsi secara berasingan:

SELECT * FROM account_servicetier_for_day(20424, '2014-08-12');
Salin selepas log masuk

Ini akan memberikan output dengan kolumnar yang dijangkakan struktur.

Menangani Pertanyaan Asal

Untuk menyelesaikan masalah dengan pertanyaan asal, terdapat berbilang pendekatan bergantung pada versi PostgreSQL yang digunakan:

PostgreSQL 9.3 atau Lebih Baru

Gunakan JOIN LATERAL untuk menyambungkan subkueri dan mengekalkan struktur baris:

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;
Salin selepas log masuk

PostgreSQL 9.2 atau Lebih Lama

Gunakan subkueri untuk memanggil fungsi dan menguraikan baris di bahagian luar pertanyaan:

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;
Salin selepas log masuk

Dalam mana-mana pendekatan, beri perhatian kepada kemungkinan pendua nama lajur apabila memilih baris terurai.

Atas ialah kandungan terperinci Mengapa Lajur Dikembalikan Fungsi PostgreSQL Saya Disatukan, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan