উপাদানটি টেবিলের মধ্যে রাখার সময় 'কলামের রেফারেন্স দ্বিধাবিভক্ত'


16

আমি PostgreSQL আমার ডেটাবেস হিসাবে ব্যবহার করছি। এবং আমাকে ডাটাবেসে একটি এন্ট্রি তৈরি করতে হবে, এবং এটি ইতিমধ্যে উপস্থিত থাকলে কেবলমাত্র তার ক্ষেত্রগুলি আপডেট করুন, তবে ক্ষেত্রগুলির মধ্যে একটিটি কেবল সেট করা না থাকলে আপডেট করা উচিত।

আমি এই প্রশ্নটি থেকে তথ্য ব্যবহার করেছি: /programming/13305878/dont-update-column-if-update-value-is-null , এটি আমার সাথে বেশ সম্পর্কিত।

আমি এই ক্যোয়ারীটি ব্যবহার করার চেষ্টা করেছি, কিন্তু আমি যখন এটি চালাচ্ছি তখন এটি এতে ত্রুটিযুক্ত Column reference 'affiliate_code' is ambiguous:

INSERT INTO accounts (id, token, affiliate_code)
VALUES (value1, value2, value3)
ON CONFLICT (id) DO
UPDATE SET token = value2,
  affiliate_code = COALESCE(affiliate_code, value3);

(অবশ্যই আসল মানগুলি প্রতিস্থাপিত হয়)।

আমি যদি এর affiliate_code = COALESCE(affiliate_code, value3)সাথে প্রতিস্থাপন করি affiliate_code = value3তবে সবকিছু কাজ করে তবে আমি এটি কাজ করতে চাই না।

আমি এই কাজটি কীভাবে করব?

এখানে আমার টেবিলটি কীভাবে সংজ্ঞায়িত করা হয়েছে:

CREATE TABLE accounts (
  id VARCHAR NOT NULL UNIQUE,
  token VARCHAR NOT NULL,
  affiliate_code VARCHAR
);

4
ব্যবহার করে দেখুন = COALESCE(accounts.affiliate_code, EXCLUDED.affiliate_code)
ypercubeᵀᴹ

উত্তর:


16

ডক্স থেকে,

দ্বন্দ্ব_অ্যাকশন একটি বিকল্প অন সংজ্ঞা ক্রিয়া নির্দিষ্ট করে। এটি হয় না কিছুই হতে পারে, বা কোনও দ্বন্দ্বের ক্ষেত্রে সঞ্চালনের জন্য আপডেটের ক্রিয়াকলাপের সঠিক বিবরণ উল্লেখ করে একটি ডিও আপডেটের শর্ত থাকতে পারে। কনফ্লিক্ট ডিও আপডেটের SET এবং WHERE ধারাগুলিতে সারণির নাম (বা একটি উপনাম) ব্যবহার করে বিদ্যমান সারিটিতে অ্যাক্সেস রয়েছে এবং বিশেষ বাদ না দেওয়া টেবিলটি সন্নিবেশের জন্য প্রস্তাবিত সারিগুলিতে রয়েছে। লক্ষ্যযুক্ত টেবিলের যে কোনও কলামে সংশ্লিষ্ট বর্জনিত কলামগুলি পড়ার জন্য নির্বাচন করার সুযোগ প্রয়োজন।

সুতরাং পরিবর্তে, প্রতি ypercubeᵀᴹ এ চেষ্টা করে দেখুন ᵀᴹ

INSERT INTO accounts (id, token, affiliate_code)
VALUES (value1, value2, value3)
ON CONFLICT (id) DO
UPDATE SET token = value2,
  affiliate_code = COALESCE(accounts.affiliate_code, excluded.affiliate_code);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.