Rumah >pangkalan data >tutorial mysql >Patutkah Saya Menyimpan Subkueri Biasa sebagai Lajur Jadual dalam PostgreSQL?
Simpan pertanyaan yang kerap digunakan sebagai lajur jadual?
Pertanyaan:
Pertimbangkan pertanyaan PostgreSQL berikut:
<code class="language-sql">SELECT <col>, <col> , (SELECT sum(<colx>) FROM <othertable> WHERE <otherforeignkeycol> = <thiskeycol>) AS <col> FROM <tbl>;</code>
Subkueri ini kekal sama merentas berbilang pertanyaan. Adakah mungkin untuk menyimpan subquery ini sebagai lajur pseudo jadual supaya saya boleh memilih lajur dalam jadual A dengan mudah yang mewakili jumlah lajur dalam jadual B berdasarkan hubungan rekod?
Jawapan:
1 Mencipta paparan ialah penyelesaian cekap yang membolehkan anda menentukan jadual maya dengan subkueri yang diperlukan sebagai salah satu lajurnya.
2 Medan dikira (lajur yang dijana storan)Lajur yang dijana storan yang diperkenalkan dalam PostgreSQL 11 memenuhi keperluan anda. Ini membolehkan anda menentukan lajur yang dikira secara dinamik berdasarkan nilai lajur lain (termasuk subkueri).
Pelaksanaan menggunakan medan terkira:Pertimbangkan borang berikut:
Buat medan terkira menggunakan fungsi:
<code class="language-sql">CREATE TABLE tbl_a (a_id int, col1 int, col2 int); CREATE TABLE tbl_b (b_id int, a_id int, colx int);</code>
Kini anda boleh bertanya:
<code class="language-sql">CREATE FUNCTION col3(a_id INT) RETURNS int8 LANGUAGE sql STABLE AS $func$ SELECT sum(colx) FROM tbl_b b WHERE b.a_id = $func$;</code>
<code class="language-sql">SELECT a_id, col1, col2, col3(a_id) FROM tbl_a;</code>Arahan:
Medan yang dikira mensimulasikan subkueri dengan memberikan nilai lajur yang ditentukan berdasarkan baris semasa dalam jadual. Akses medan terkira menggunakan notasi atribut (contohnya,
). Teknik ini membolehkan pengambilan semula dinamik nilai yang dikira dan mengekalkan keserasian dengan pertanyaan SELECT *. Ambil perhatian bahawa definisi fungsi telah diubah suai di sini, menggunakan secara langsung sebagai parameter, mengelakkan penggunaan penulisan rekod dan memudahkan pertanyaan. col3(a_id)
Atas ialah kandungan terperinci Patutkah Saya Menyimpan Subkueri Biasa sebagai Lajur Jadual dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!