Rumah >pangkalan data >tutorial mysql >Patutkah Saya Menyimpan Subkueri Biasa sebagai Lajur Jadual dalam PostgreSQL?

Patutkah Saya Menyimpan Subkueri Biasa sebagai Lajur Jadual dalam PostgreSQL?

Patricia Arquette
Patricia Arquetteasal
2025-01-11 18:46:42589semak imbas

Should I Store Common Subqueries as Table Columns in 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!

Kenyataan:
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