Rumah > pangkalan data > tutorial mysql > Mengapa Lajur Dikembalikan Fungsi Saya Disatukan dalam Pertanyaan PostgreSQL Saya?

Mengapa Lajur Dikembalikan Fungsi Saya Disatukan dalam Pertanyaan PostgreSQL Saya?

Susan Sarandon
Lepaskan: 2024-12-26 13:27:11
asal
674 orang telah melayarinya

Why Are My Function's Returned Columns Concatenated in My PostgreSQL Query?

Rekod Dikembalikan daripada Function Shows Concatenated Lajur: Membongkar Punca

Dalam pertanyaan, menyertai jadual dan mendapatkan semula data sejarah daripada fungsi, pengguna mungkin menghadapi masalah di mana lajur yang dikembalikan daripada fungsi kelihatan digabungkan menjadi satu rentetan. Anomali ini timbul apabila menggunakan fungsi secara terus dalam pertanyaan utama.

Memahami Isu

Apabila menanyakan fungsi yang mengembalikan berbilang lajur, seperti:

account_servicetier_for_day(acct.accountid, '2014-08-12')
Salin selepas log masuk

ia mengembalikan rekod yang mengandungi data yang diminta. Walau bagaimanapun, apabila rekod ini dibenamkan dalam pertanyaan lain, PostgreSQL mentafsirkannya sebagai rentetan bercantum tunggal.

Output Fungsi Mengurai

Untuk membetulkannya, pengguna harus mengekstrak individu tersebut lajur daripada rekod fungsi. Dalam PostgreSQL versi 9.3 dan lebih baru, ini boleh dicapai menggunakan sintaks JOIN LATERAL, yang membenarkan penyepaduan lancar fungsi ke dalam klausa FROM:

JOIN LATERAL account_servicetier_for_day(a.accountid, '2014-08-12') f ON TRUE
Salin selepas log masuk

Klausa ON TRUE memastikan semua baris dari sebelah kiri jadual dicantumkan dengan hasil fungsi, tanpa mengira bilangan baris dikembalikan.

Dalam PostgreSQL 9.2 dan lebih awal, mengekstrak data lajur memerlukan subkueri eksplisit:

(SELECT *, account_servicetier_for_day(a.accountid, '2014-08-12') AS rec
   FROM account_tab a) AS a
Salin selepas log masuk

Di sini, subkueri memberikan hasil panggilan fungsi kepada rekod bernama rec. Pertanyaan luar kemudiannya boleh merujuk kepada lajur rekod, seperti a.rec.timestamp.

Mengelakkan Tidak Masuk (Subquery)

Akhir sekali, adalah disyorkan untuk mengelak daripada menggunakan NOT IN (subquery) untuk pengecualian set. Sebaliknya, pilih klausa NOT EXISTS, yang lebih cekap dan kurang terdedah kepada isu prestasi.

Atas ialah kandungan terperinci Mengapa Lajur Dikembalikan Fungsi Saya Disatukan dalam Pertanyaan PostgreSQL Saya?. 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