আপনি যা চাইছেন তা অর্জন করার জন্য অনেকগুলি উপায় রয়েছে। খাঁটি সেট-ভিত্তিক দৃষ্টিভঙ্গি ব্যবহার করা সম্ভবত সবচেয়ে সহজ উপায় straight
select election_id from elections
minus -- except is used instead of minus by some vendors
select election_id from votes where user_id = ?
নির্বাচনের সেট থেকে, ব্যবহারকারীরা যেখানে ভোট দিয়েছেন সেখানে আমরা তাদের সরিয়ে দেই। নির্বাচনের শিরোনাম পেতে নির্বাচনের সাথে যোগ হতে পারে ফলাফল। আপনি নিজের প্রশ্নটি ট্যাগ না করলেও, আপনি মাইএসকিউএল ব্যবহার করছেন বলে বিশ্বাস করার কারণ রয়েছে এবং সেখানে মাইনাস বা এক্সেসপিটি সমর্থিত নয়।
অন্য রূপটি হ'ল NOT EXISTS
প্রিডিকেট ব্যবহার করা :
select election_id, title
from elections e
where not exists (
select 1
from votes v
where e.election_id = v.election_id
and v.user_id = ?
);
অর্থাত্ নির্বাচন যেখানে এটির ব্যবহারকারীর কাছ থেকে একটি ভোট উপস্থিত নেই। NOT IN
সম্পৃক্ত একটি অনুরূপ ফ্যাশন ব্যবহার করা যাবে। যেহেতু সেখানে নালগুলি জড়িত থাকতে পারে এটি লক্ষণীয় যে শব্দার্থবিজ্ঞানগুলি IN এবং উপস্থিতির মধ্যে পৃথক রয়েছে।
অবশেষে, আপনি একটি বাহ্যিক যোগদান ব্যবহার করতে পারেন
select election_id, title
from elections e
left join votes v
on e.election_id = v.election_id
and v.user_id = ?
where v.user_id is null;
যদি ওপেন প্রিকেটিকের সাথে মেলে এমন কোনও সারি নেই, তবে ফলাফল থেকে সমস্ত কলামগুলি নাল দিয়ে প্রতিস্থাপন করা হবে। অতএব, আমরা পরীক্ষা করতে পারি যে ভোটের কোনও কলাম কোথায় বিধিভঙ্গিতে বাতিল আছে। যেহেতু ভোটের উভয় কলামই নালায় থাকতে পারে আপনার সতর্ক হওয়া দরকার।
আদর্শভাবে, আপনার টেবিলগুলি ঠিক করা উচিত যাতে নাল দ্বারা সৃষ্ট গোচাগুলি আপনাকে মোকাবেলা করতে না হয়:
CREATE TABLE elections
( election_id int NOT NULL AUTO_INCREMENT PRIMARY KEY
, title varchar(255) not null );
CREATE TABLE votes
( election_id int not null
, user_id int not null
, constraint pk_votes primary key (election_id, user_id)
, constraint fk_elections foreign key (election_id)
references elections (election_id)
);