Apakah mungkin untuk mengganti f1, f2, f3...
nama nama standar saat menggunakan row_to_json
fungsi hanya untuk beberapa kolom?
dapat saya lakukan
row_to_json(customers)
kembali
{"id_customer":2,"first_name":"bla","last_name":"second_bla"}
Tetapi jika saya hanya ingin nama tanpa id_customer
, saya harus menggunakan
row_to_json(row(first_name, last_name))
dan kemudian saya dapatkan
{"f1":"bla","f2":"second_bla"}
Dan saya ingin mendapatkan hasil ini dengan nama kolom default atau nama saya sendiri. Saya tahu saya bisa membuat tipe dan penggunaan komposit sendiri
row_to_json(row(first_name, last_name))::my_custom_type
tetapi apakah tidak mungkin untuk melakukannya dengan benar dalam permintaan tanpa membuat jenis itu?
postgresql
boobiq
sumber
sumber
Jawaban:
Ekspresi tabel yang umum memungkinkan Anda untuk menentukan alias secara eksplisit, tidak hanya untuk CTE tetapi untuk kolomnya.
Ini berbeda dengan contoh @ dezso karena tidak digunakan
col AS alias
untuk setiap col dalamSELECT
daftar; alias nama kolom dalam alias tabel CTE.Saya telah menggunakan
VALUES
ekspresi sebagai subquery tetapi Anda dapat menggunakanSELECT
apa pun yang Anda suka; intinya adalah bahwa apa pun alias kolom yang disediakan atau diasumsikan dalam subquery dapat ditimpa dalam definisi CTE dengan menetapkan daftar nama-kolom.Anda bisa melakukan hal yang sama di subquery, lagi daripada menggunakan
AS alias
:Ini tidak bekerja dengan
ROW
ekspresi secara langsung; Anda hanya bisa melemparkanROW
ke tipe beton, Anda tidak bisa menamainya.sumber
akan melakukan apa yang Anda inginkan tanpa dampak kinerja apa pun (dan tidak terlalu bertele-tele):
sumber
Anda dapat melakukan sesuatu seperti ini:
(Tentu saja, hal yang sama dapat dicapai dengan
tapi saya menemukan yang pertama lebih mudah dibaca.)
Pada
WITH
bagian ini Anda dapat membuat baris struktur apa saja dengan cepat.sumber
Anda bisa menggunakannya
json_build_object
.sumber