সারণিগুলি মুছুন যা অন্য সারণীতে উল্লেখ করা হয়নি


15

পোস্টগ্রিএসকিউএল 9.3 ডাটাবেসে আমার দুটি টেবিল রয়েছে: টেবিলের টেবিলের দিকে ইশারা করা link_replyনামে একটি বিদেশী কী which_groupরয়েছে link_group

আমি সমস্ত সারি মুছতে চাই link_groupযেখানে থেকে কোনও সম্পর্কিত সারি link_replyবিদ্যমান নেই। যথেষ্ট বেসিক মনে হচ্ছে তবে আমি এর সাথে লড়াই করছি।

এটি কি এমন কিছু সহজ হবে (কাজ করছে না)?

DELETE FROM link_group WHERE link_reply = NULL;

আপনার কি সবার দেখার জন্য একটি ডিডিএল আছে?
ডিজেস্টার

MINUS অপারেটরটি একবার দেখুন। আপনাকে লিংক_প্রেমীতে একটি ক্ষেত্র নির্দিষ্ট করতে হবে।
ভোরেস

DELETE FROM links_group USING links_group AS lg LEFT JOIN links_reply AS lr ON lg.col= lr.some_other_col WHERE links_reply.some_other_col IS NULL
মিহাই

আমার একটি অনুরূপ প্রশ্ন ছিল, যা অ্যাকাউন্টে একযোগে লাগে। দেখুন ডিবিএ.স্ট্যাকেক্সেঞ্জার / প্রশ্ন / 251875
pbillen

উত্তর:


19

ম্যানুয়ালটি উদ্ধৃত করা হচ্ছে:

আছে: ডাটাবেসের মধ্যে অন্যান্য টেবিল অন্তর্ভুক্ত তথ্য ব্যবহার করে একটি সারণী সারিগুলি মুছুন করার দুটি উপায় আছে উপ-নির্বাচন ব্যবহার করে, বা অতিরিক্ত টেবিল উল্লেখ USINGদফা । কোন কৌশলটি আরও উপযুক্ত তা নির্দিষ্ট পরিস্থিতিতে নির্ভর করে।

বোল্ড জোর আমার। অন্য টেবিলের অন্তর্ভুক্ত নয় এমন তথ্য ব্যবহার করা সামান্য বিট জটিল, তবে সহজ সমাধান রয়েছে। স্ট্যান্ডার্ড প্রযুক্তির অস্ত্রাগার থেকে শুরু করে ...

... একটি NOT EXISTSবিরোধী-আধা-যোগদান সম্ভবত সম্ভবত সবচেয়ে সহজ এবং সবচেয়ে দক্ষ DELETE:

DELETE FROM link_group lg
WHERE  NOT EXISTS (
   SELECT FROM link_reply lr
   WHERE  lr.which_group = lg.link_group_id
   );

link_group_idএর প্রাথমিক কী এর কলামের নাম হিসাবে ধরে নেওয়া (যেহেতু সারণির সংজ্ঞা দেওয়া হয়নি) link_group

কৌশল @Mihai মন্তব্য কাজ হিসাবে ভাল (সঠিকভাবে প্রয়োগ):

DELETE FROM link_group lg
USING  link_group      lg1
LEFT   JOIN link_reply lr ON lr.which_group = lg1.link_group_id
WHERE  lg1.link_group_id = lg.link_group_id
AND    lr.which_group IS NULL;

তবে যেহেতু USINGক্লজে টেবিলের ভাবটি লক্ষ্য টেবিলের সাথে যুক্ত হয়েছে ( lgউদাহরণস্বরূপ) ক CROSS JOINএর সাথে আপনার একই টেবিলের আরেকটি উদাহরণ প্রয়োজন স্টেপিং পাথর ( lg1উদাহরণস্বরূপ) এর জন্য LEFT JOIN, যা কম মার্জিত এবং সাধারণত ধীর হয়।

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