'রিটার্নিং' ক্লজটি inোকানো হয়নি এমন রিটার্ন সোর্স কলামগুলি কি পারবে?


14

এখানে আমার বাস্তব-বিশ্বের সমস্যার একটি ন্যূনতম উদাহরণ:

create table t(id serial primary key, rnd double precision);

অবশ্যই আপনি একটি returningধারা সহ সন্নিবেশিত কলামগুলি ফিরিয়ে দিতে পারেন :

with w as (insert into t(rnd) values(random()) returning *)
insert into t(rnd) select random() from w returning *;
/*
| ID |            RND |
|----|----------------|
|  9 | 0.203221440315 |
*/

আপনি একটি আক্ষরিক ফিরে আসতে পারেন:

with w as (insert into t(rnd) values(random()) returning *)
insert into t(rnd) select random() from w returning *, 1.0 dummy;
/*
| ID |            RND | DUMMY |
|----|----------------|-------|
| 11 | 0.594980469905 |     1 |
*/

তবে আপনি উত্স কলামগুলি ফিরিয়ে দিতে পারবেন না:

with w as (insert into t(rnd) values(random()) returning *)
insert into t(rnd) select random() from w returning *, w.rnd;
/*
ERROR: missing FROM-clause entry for table "w": with w as (insert into t(rnd) values(random()) returning *) insert into t(rnd) select random() from w returning *, w.rnd
*/

w.rndচূড়ান্ত returningধারাটি থেকে বেরিয়ে আসার কোনও উপায় আছে কি ?

ডিবি <> ফিডল এখানে


এমএস এসকিউএল সার্ভারে কেবল মার্জ স্টেটমেন্ট অতিরিক্ত কলামগুলি ফেরত দেওয়ার অনুমতি দেয়। সম্ভবত এটি পোস্টগ্রাজের জন্যও কাজ করবে।
সেবাস্তিয়ান মেইন

উত্তর:


12

ধারাটিতে নথি RETURNINGবলছে:

প্রতিটি সারি সন্নিবেশ করার পরে INSERT কমান্ড দ্বারা গণনা করা এবং প্রত্যাবর্তনের জন্য একটি অভিব্যক্তি। এক্সপ্রেশনটি টেবিলের নাম অনুসারে সারণীর যে কোনও কলামের নাম ব্যবহার করতে পারে। Rowোকানো সারি (গুলি) এর সমস্ত কলাম ফিরে পেতে * লিখুন।

এটি পরিষ্কারভাবে অন্য কোনও টেবিলের কলামগুলির জন্য প্রযোজ্য নয়।

যদিও আমি সত্যিই সমস্যার বিন্দুটি পাই না (যেমন আপনি এটি কেন করেন - আমি এটি কল্পনা করি কারণ এটি আসলটির কিছুটা বিমূর্ত সংস্করণ) তবে সম্ভাব্য সমাধানটি হতে পারে:

WITH w AS (INSERT INTO t(rnd) VALUES (random()) RETURNING *),
     x AS (INSERT INTO t(rnd) SELECT random() FROM w RETURNING *)
SELECT w.rnd, x.rnd
  FROM w, x;

এটি হল, আপনি কোনও প্রশ্নের শুরুতে একাধিক লিখনযোগ্য সিটিই রাখতে পারেন। দয়া করে এটি ডিবিফিডেলে কর্মে দেখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.