যেখানে একটি ধারা অবজ্ঞা করা সম্ভব?
যেমন
DELETE * FROM table WHERE id != 2;
উত্তর:
আপনি এই মত করতে পারেন
DELETE FROM table WHERE id NOT IN ( 2 )
বা
DELETE FROM table WHERE id <> 2
@ ফ্র্যাঙ্ক স্মিটে যেমন উল্লেখ করেছেন, আপনিও ন্যূনুয়াল মান সম্পর্কে সতর্ক থাকতে চান। যদি আপনি সমস্ত কিছু মুছতে চান যা 2
(এনএলএলগুলি সহ) নয় তবে OR id IS NULL
যেখানে বিধি যুক্ত করুন।
!= NULL
কাজ করছেন না কেন তাদের ভাবনা নিয়ে এখানে কেবল একটি সাধারণ মন্তব্য : "আপনি NUL এর জন্য পরীক্ষার জন্য পাটিগণিত তুলনা অপারেটর যেমন =, <, বা <> ব্যবহার করতে পারবেন না।" ( মাইএসকিউএল ডকুমেন্টেশন থেকে )। সুতরাং এর অর্থ আপনার ব্যবহার করতে হবে IS NOT NULL
।
আপনার প্রশ্নের উত্তর ইতিমধ্যে অন্যান্য পোস্টারদের দ্বারা জবাব দেওয়া হয়েছিল, আমি কেবল এটি উল্লেখ করতে চাই
delete from table where id <> 2
(বা এর রূপগুলি, আইডি = 2 ইত্যাদি নয়) সারণি মুছবে না যেখানে আইডি NULL রয়েছে।
আপনি যদি id = NULL দিয়ে সারিগুলি মুছতে চান তবে:
delete from table where id <> 2 or id is NULL
<>
যেখানে ক্লজ অবহেলা করতে ব্যবহার করুন ।
আনুষ্ঠানিক যুক্তি এবং বীজগণিত ফিরে দেখুন। মত একটি অভিব্যক্তি
A & B & (D | E)
কয়েকটি উপায়ে উপেক্ষিত হতে পারে:
সুস্পষ্ট উপায়:
!( A & B & ( D | E ) )
উপরেরগুলিও পুনঃস্থাপন করা যেতে পারে, আপনার কেবল যৌক্তিক ভাবের কিছু বৈশিষ্ট্য মনে রাখা দরকার:
!( A & B )
এর সমতূল্য (!A | !B)
।!( A | B )
এর সমতূল্য (!A & !B)
।!( !A )
(এ) এর সমতুল্য।এটি প্রয়োগ হয় এমন পুরো এক্সপ্রেশন জুড়ে নোট (!) বিতরণ করুন, অপারেটরদের ইনভার্ট করে এবং আপনার সাথে যাওয়ার সাথে দ্বিগুণ নেতিবাচক অপসারণ:
!A | !B | ( !D & !E )
সুতরাং, সাধারণভাবে, উপরের বিধি অনুসারে যে কোনও যেখানে ক্লজ অবহেলা করা যেতে পারে। এই অবহেলা
select *
from foo
where test-1
and test-2
and ( test-3
OR test-4
)
হয়
select *
from foo
where NOT( test-1
and test-2
and ( test-3
OR test-4
)
)
বা
select *
from foo
where not test-1
OR not test-2
OR ( not test-3
and not test-4
)
কোনটা ভাল? এটি একটি খুব প্রসঙ্গে সংবেদনশীল প্রশ্ন। শুধু আপনি যে সিদ্ধান্ত নিতে পারেন।
তবে সচেতন থাকুন যে নোটের ব্যবহারটি অপ্টিমাইজার কী করতে পারে বা কী করতে পারে তা প্রভাবিত করতে পারে। আপনি সর্বোত্তম ক্যোয়ারী পরিকল্পনার চেয়ে কম পেতে পারেন।
হ্যাঁ. স্মৃতি যদি আমাকে পরিবেশন করে তবে তা কাজ করা উচিত। আমাদের আপনি ব্যবহার করতে পারেন:
DELETE FROM table WHERE id <> 2
আমি কেবল এই সমস্যাটি সমাধান করছিলাম। যদি আপনি <> ব্যবহার করেন বা কোনও ভেরিয়েবলের মধ্যে না রাখেন তবে তা নাল, ফলস্বরূপ মিথ্যা হবে। সুতরাং <> 1 এর পরিবর্তে আপনার অবশ্যই এটি দেখতে হবে:
AND (isdelete is NULL or isdelete = 0)
id != NULL
করে না ।