Apakah ada cara mudah untuk mengadaptasi jenis-jenis pertanyaan MySQL ini ke PostgreSQL:
pengaturan variabel di MySQL suka
set @aintconst = -333 set @arealconst = -9.999
Menetapkan variabel dari kueri SELECT dan menggunakan variabel-variabel tersebut selanjutnya dalam SQL saya seperti:
select @pfID := id from platform where bios like '%INTEL%' select @clientID := id from client where platformID = @pfID
Saya akan sangat berterima kasih untuk petunjuk, terutama pada (2).
mysql
postgresql
Daniel
sumber
sumber
Jawaban:
Ini mudah dilakukan di dalam fungsi PL / pgSQL (atau blok DO ):
Anda juga dapat menggunakan variabel GUC :
Atau Anda dapat menggunakan CTE dengan bergabung:
sumber
Saya menggunakan DENGAN pernyataan:
dan:
sumber
Anda sudah menjawabnya sendiri: Tidak, tidak ada dalam SQL biasa. Anda dapat menggunakan PL / PgSQL jika Anda ingin variabel, dalam suatu fungsi atau
DO
blok.Sebagian besar penggunaan untuk variabel kueri di MySQL dipenuhi oleh CTE (
WITH
kueri), fungsi jendela, dll dalam PostgreSQL.Sebenarnya ada, tetapi mereka tidak cocok untuk penggunaan umum dalam kueri. Anda biasanya mengakses GUC khusus dengan
SET
danSHOW
, tetapi Anda bisa menggunakan:GUC itu mahal dan itu ide yang buruk untuk menggunakan ini untuk permintaan tujuan umum, tetapi kadang-kadang ada penggunaan yang valid. Anda hanya dapat menggunakan pengaturan seperti
myapp.variable
juga.sumber
Variabel PSQL
Sejak setidaknya versi 7.1 klien PostgreSQL telah menyediakan fungsionalitas ini dengan
psql
variabelPada dasarnya yang Anda inginkan adalah kemampuan untuk skrip SQL. PSQL memiliki persyaratan dan variabel, dan kemampuan untuk memberi umpan balik SQL yang dihasilkan secara dinamis yang membuat pekerjaan ini lebih mudah. Ini bukan fungsi sisi-server di dunia PostgreSQL, dan umumnya saya akan melakukan ini dalam bahasa klien (seperti Node.js atau Perl daripada di
psql
).sumber
SET LOCAL variable value
Untuk contoh kedua Anda tidak perlu variabel (baik di MySQL maupun di Postgres):
Jangan takut pada sub-kueri, optimizer kueri Postgres jauh lebih pintar daripada MySQL.
Jika hal di atas terlalu lambat, menulis ulang menjadi
exists
kueri terkadang lebih cepat:sumber