मैं दो तालिकाओं के सबक्वायरी परिणामों से तालिका में डेटा सम्मिलित करने के लिए पोस्टग्रेस्क्ल में निम्न क्वेरी चलाने का प्रयास कर रहा हूं।

यहाँ मेरी तीन नमूना तालिकाएँ हैं -

CREATE TABLE a (
  id SERIAL PRIMARY KEY
  data int
);
CREATE TABLE b (
  id SERIAL PRIMARY KEY,
  aID INT 
  data INT
);
CREATE TABLE c (
  id SERIAL PRIMARY KEY,
  aID INT,
  bID INT,
  name VARCHAR
);

मैं c तालिका में INSERT करने के लिए निम्न क्वेरी का उपयोग कर रहा हूं -

INSERT INTO c (
  aID,
  bID,
  name)
VALUES (
  (SELECT id FROM a WHERE data=$1),
  (SELECT id FROM b WHERE data=$2 AND aID=(SELECT id FROM a WHERE data=$1)),
  $3)
ON CONFLICT (bID)
DO NOTHING;

मैं सोच रहा था कि क्या डेटा एक्सेस को कम करने के लिए दूसरी सबक्वेरी में a टेबल से पहले SELECT के परिणामों का उपयोग करना संभव था। मुझे यकीन नहीं है कि यह जाने का सही तरीका है। किसी भी सहायता की सराहना की जाएगी।

0
Ice3man 8 जिंदा 2020, 02:36

1 उत्तर

सबसे बढ़िया उत्तर

मैं सोच रहा था कि डेटा एक्सेस को कम करने के लिए दूसरी सबक्वायरी में तालिका से पहले चयन के परिणामों का उपयोग करना संभव था या नहीं।

मुझे संदेह है कि आप इसके बजाय एक join चाहते हैं:

INSERT INTO c (aID, bID, name)
SELECT a.id, b.id, $3
FROM a 
INNER JOIN b ON b.aid = a.id
WHERE a.data = $1 AND b.data = $2

यह मानता है कि "एक तालिका से पहला चयन करें" और "दूसरी सबक्वायरी" वास्तव में एक ही क्वेरी हैं (जो आपके प्रश्न में बिल्कुल ऐसा नहीं है जहां पहली क्वेरी a.data = $1 पर फ़िल्टर होती है जबकि सबक्वायरी फ़िल्टर a.data = $2)। यदि प्रश्न अलग हैं, तो आप शायद दो स्वतंत्र प्रश्नों के साथ बेहतर हैं)।

1
GMB 7 जिंदा 2020, 23:44