आपको अपने टेबल के नाम और उपनाम सही करने होंगे। साथ ही, दो तालिकाओं के बीच का कनेक्शन image
कॉलम है (data
नई तालिका में file_data
):
WITH inserted AS (
INSERT INTO file_data (data)
SELECT image
FROM task_log
WHERE image IS NOT NULL
RETURNING id, data -- can only reference target row
)
UPDATE task_log t
SET attachment_id = i.id
, attachment_type = 'INLINE_IMAGE'
FROM inserted i
WHERE t.image = i.data;
जैसा कि आपने मेरे पुराने उत्तर में बताया है, image
task_log
. में अद्वितीय होना चाहिए इसके काम करने के लिए:
मैंने एक तकनीक जोड़ी है कि संदर्भित उत्तर में गैर-अद्वितीय मूल्यों को कैसे अलग किया जाए। सुनिश्चित नहीं हैं कि आप file_data
में डुप्लीकेट इमेज चाहते हैं या नहीं , हालांकि।
RETURNING
में एक INSERT
. का खंड आप केवल सम्मिलित पंक्ति से कॉलम का संदर्भ दे सकते हैं। मैनुअल:
बोल्ड जोर मेरा।
डुप्लिकेट स्रोत मानों को मोड़ें
यदि आप INSERT
. की लक्ष्य तालिका में अलग-अलग प्रविष्टियां चाहते हैं (task_log
), इस मामले में आपको केवल DISTINCT
. की आवश्यकता है आरंभिक में SELECT
:
WITH inserted AS (
INSERT INTO file_data (data)
SELECT DISTINCT image -- fold duplicates
FROM task_log
WHERE image IS NOT NULL
RETURNING id, data -- can only reference target row
)
UPDATE task_log t
SET attachment_id = i.id
, attachment_type = 'INLINE_IMAGE'
FROM inserted i
WHERE t.image = i.data;
परिणामी file_data.id
task_log
. में कई बार उपयोग किया जाता है . ध्यान रखें कि task_log
. में कई पंक्तियाँ अब उसी छवि को file_data
. में इंगित करें . अपडेट और डिलीट करने में सावधानी...