সেটগুলির ক্ষেত্রে বিবেচনা করুন, পুনরুক্তিকারী নয়; বর্গক্ষেত্র বিবৃতি পছন্দসই আউটপুট সেট (ওরফে টেবিল / সম্পর্ক) এর বৈশিষ্ট্যগুলি সংজ্ঞায়িত করে
সমস্ত ভেন্যু নাম যেমন প্রতিটি ব্যান্ডকন্ট্রির জন্য সে দেশের একটি ব্যান্ড থাকে যা সেই নামের জায়গায় খেলে
এর ফলাফল (যদি আমি আপনার উদ্দেশ্যগুলি সঠিকভাবে বুঝতে পারি!) হবে এমন জায়গাগুলির সেট হবে যাতে কমপক্ষে একটি ব্যান্ড থাকে that ভেন্যুতে plays ব্যান্ডকন্ট্রি উপর পুনরাবৃত্তি অপ্রয়োজনীয়, কারণ প্লেস সম্পর্কের ইতিমধ্যে আপনার যে তথ্যটি অনুসন্ধান করা হয়েছে সেগুলির তথ্য রয়েছে, আপনাকে কেবল নকলগুলি অপসারণ করতে হবে
সুতরাং এসকিউএল এ হবে:
select
distinct venueName
from PLAYS
সম্পাদনা: ঠিক আছে, তাই পছন্দসই সেটটি কিছুটা জটিল। ডাটাবেসটি সম্পর্কে জিজ্ঞাসা করা হচ্ছে প্রশ্নটি: সব দেশ থেকে কোন স্থানগুলি ব্যান্ড হোস্ট করেছে?
সুতরাং, আমরা লক্ষ্য হিসাবে পছন্দসই সেটের একটি উপাদানটির সদস্যপদ মানদণ্ডকে সংজ্ঞায়িত করি, তারপরে সেটটি জনপ্রিয় করার জন্য পিছনের দিকে কাজ করুন work ভেন্যু প্রতিটি দেশ থেকে কমপক্ষে একটি ব্যান্ডের জন্য প্লেস সারিতে থাকে তবে আউটপুট সেটটির সদস্য। আমরা এই তথ্যটি কীভাবে পাব?
একটি উপায় হ'ল প্রতিটি ভেন্যুর জন্য স্বতন্ত্র দেশ গণনা করা এবং এটি সমস্ত দেশের গণনার সাথে তুলনা করা। তবে আমাদের কোনও COUNTRY সম্পর্ক নেই। যদি আমরা এক মুহুর্তের জন্য দেওয়া মডেলটি সম্পর্কে ভাবি, তবে আমরা দেখতে পাব যে সমস্ত দেশের সেট সঠিক মানদণ্ড নয়; এটি হ'ল সমস্ত দেশের সংস্থার কমপক্ষে একটি ব্যান্ড। সুতরাং আমাদের কোনও দেশের টেবিলের প্রয়োজন নেই (যদিও একটি সাধারণ মডেলের জন্য আমাদের একটি হওয়া উচিত), এবং আমরা অনুষ্ঠানের দেশটির বিষয়ে চিন্তা করি না, আমরা কেবল যে দেশগুলিতে ব্যান্ড রয়েছে তাদের গণনা করতে পারি, যেমন (এমএস-এসকিউএল এ) )
declare @BandCountryCount int
select
@BandCountryCount = COUNT(distinct bandCountry)
from BAND
আমরা প্রতিটি ভেন্যুর জন্য ব্যান্ড দেশগুলি গণনা করতে পারি
select
P.venueName, COUNT(distinct B.bandCountry) as VenueBandCountryCount
from PLAYS P
inner join BAND B on B.bandName = P.bandName
এবং আমরা একটি subquery ব্যবহার করে একসাথে টুকরা করতে পারেন
select
venueName
from (
select
P.venueName, COUNT(distinct B.bandCountry) as VenueBandCountryCount
from PLAYS P
inner join BAND B on B.bandName = P.bandName
) X
where X.VenueBandCountryCount = @BandCountryCount
এখন, এটি সম্ভাব্য সর্বোত্তম কোয়েরি নয় (গ্রুপ এবং হ্যাভিং টেম্প ভেরিয়েবল এবং সাবকিয়ারের চেয়ে আরও 'মার্জিত' সমাধান হিসাবে বিবেচিত হতে পারে) তবে এটি আমরা যা করছি তারপরে এটি স্পষ্টতই স্পষ্টত তাই আমরা ওপি'র উদ্দেশ্যে এটি রেখে যাব ।
ওপির উদ্দেশ্য ছিল মানসিকতা কীভাবে অপরিহার্য থেকে ঘোষণার দিকে নিয়ে যাওয়া যায় তা শিখতে। সে লক্ষ্যে বর্ণিত অত্যাবশ্যকীয় সমাধানটি কী করছিল তা দেখুন:
প্রতিটি ভেন্যু নেম সমস্ত ব্যান্ডকাস্ট্রির উপরে পুনরাবৃত্তি করে এবং প্রতিটি ব্যান্ডকন্ট্রি এর থেকে আসা ব্যান্ডের তালিকা পান। যদি তাদের কেউ ভেন্যু নেমে না খেলেন তবে পরবর্তী ভেন্যু নামটিতে যান। অন্যথায়, ব্যান্ডকাউন্টরিস পুনরাবৃত্তির শেষে ভেন্যু নামটি ভাল ভেন্যু নামগুলির সেটে যুক্ত করুন
উপরোক্ত ক্ষেত্রে নির্ধারণের মানদণ্ড কী? আমি ভাবছি এটাই সেটা:
... যদি তাদের কেউই [কোনও নির্দিষ্ট দেশের ব্যান্ডের সেট] ভেন্যু নেমে খেলেন না ...
এটি একটি অযোগ্য মাপদণ্ড । অপরিহার্য চিন্তার প্রক্রিয়াটি পুরো বালতি দিয়ে শুরু হচ্ছে এবং মানদণ্ডের সাথে খাপ খায় না এমন জিনিসগুলি বাইরে ফেলে। আমরা ডেটা ফিল্টার করছি ।
এটি সাধারণ স্টাফের জন্য দুর্দান্ত, তবে এটি পছন্দসই ফলাফল সেট তৈরির ক্ষেত্রে ভাবতে সহায়তা করে; এর সাথে সম্পর্কিত যোগ্যতার মানদণ্ড কী এমন যে কোনও একটি তার পরিবর্তে বালতি পূরণ করতে দেয়?
- অযোগ্য ঘোষণাকারী: যদি কোনও অনুষ্ঠানস্থলে বাজানো ব্যান্ডকাউন্ট্রি থেকে কোনও ব্যান্ড না থাকে, তবে স্থানটি অযোগ্য ঘোষণা করা হবে
- (আংশিক) যোগ্যতা অর্জনকারী: যদি কোনও ব্যান্ডকাউন্ট্রি থেকে কমপক্ষে একটি ব্যান্ড কোনও ভেন্যুতে খেলেন, তবে স্থানটি ঠিকঠাক হতে পারে; বাকি ব্যান্ডকন্ট্রিগুলি পরীক্ষা করে দেখুন
- (পূর্ণ) যোগ্যতা অর্জনকারী: প্রতিটি ব্যান্ডকাউন্ট্রি থেকে কমপক্ষে একটি ব্যান্ড যদি কোনও ভেন্যুতে খেলেন তবে ভেন্যুটি যোগ্য
চূড়ান্ত কোয়ালিফায়ার গণনা ব্যবহার করে সহজ করা যেতে পারে: একটি ব্যান্ডকন্ট্রি 'সন্তুষ্ট' যদি সেখান থেকে কমপক্ষে একটি ব্যান্ড কোনও ভেন্যুতে খেলেন; ভেন্যুর জন্য 'সন্তুষ্ট' ব্যান্ড দেশগুলির সংখ্যা ভেন্যু যোগ্য হওয়ার জন্য ব্যান্ড দেশগুলির সংখ্যার সমান হতে হবে।
এখন আমরা নেভিগেশন মাধ্যমে সম্পর্ক জুড়ে যুক্তি বলতে পারি:
- ভেন্যু সম্পর্কের সাথে শুরু করুন [উত্তরের জন্য আমাদের এটির প্রয়োজন নেই, তবে এটি সম্পর্কযুক্ত নেভিগেশনের ধারণাগত সূচনার পয়েন্ট]
- ভেন্যু নেমে প্লেগুলিতে যোগ দিন
- ব্যান্ডকাউন্ট্রি পেতে ব্যান্ডনেমে ব্যান্ডে যোগ দিন
- আমরা ব্যান্ডের নামটি যত্ন করি না; কেবল ভেন্যু নাম এবং ব্যান্ডকন্ট্রি নির্বাচন করুন
- আমরা রিডান্ট্যান্ট ব্যান্ডকাস্ট্রিজের বিষয়ে চিন্তা করি না; DISTRICT বা GROUP BY ব্যবহার করে সদৃশগুলি মুছে ফেলুন
- আমরা কেবলমাত্র স্বতন্ত্র ব্যান্ডকাউন্টের গণনা সম্পর্কেই যত্নশীল not
- আমরা কেবলমাত্র এমন স্থানগুলি চাই যেখানে পৃথক ব্যান্ডকাউন্টের গণনাগুলি ব্যান্ডকাউন্টের মোট সংখ্যার সমান
যা উপরের সমাধানে ফিরে আসে (বা এর যুক্তিসঙ্গত পক্ষপাতিত্ব)
সংক্ষিপ্তসার
- সেটতত্ত্ব
- সম্পর্কিত নেভিগেশন পাথ
- সমেত বনাম একচেটিয়া মানদণ্ড (যোগ্যতা বনাম অযোগ্য ঘোষণা)