এসকিউএল যেখানে শর্ত সমান নয়?


উত্তর:


160

আপনি এই মত করতে পারেন

DELETE FROM table WHERE id NOT IN ( 2 )

বা

DELETE FROM table WHERE id <>  2 

@ ফ্র্যাঙ্ক স্মিটে যেমন উল্লেখ করেছেন, আপনিও ন্যূনুয়াল মান সম্পর্কে সতর্ক থাকতে চান। যদি আপনি সমস্ত কিছু মুছতে চান যা 2(এনএলএলগুলি সহ) নয় তবে OR id IS NULLযেখানে বিধি যুক্ত করুন।


আমি এই কমান্ডটি কয়েকবার চেষ্টা করেছি .. তবে যতক্ষণ না বুঝেছি যে মাইএসকিউএল ডিলিট * ব্যবহার করে না ...
ফ্রাঙ্ক ভিলিয়া ২

আপনি সেখানে যান, উত্তর সরিয়ে উত্তর সম্পাদনা করে * নির্দেশের জন্য ধন্যবাদ।
প্রবীণ লোবো 21

4
যারা এখানে != NULLকাজ করছেন না কেন তাদের ভাবনা নিয়ে এখানে কেবল একটি সাধারণ মন্তব্য : "আপনি NUL এর জন্য পরীক্ষার জন্য পাটিগণিত তুলনা অপারেটর যেমন =, <, বা <> ব্যবহার করতে পারবেন না।" ( মাইএসকিউএল ডকুমেন্টেশন থেকে )। সুতরাং এর অর্থ আপনার ব্যবহার করতে হবে IS NOT NULL
বাইসন

31

আপনার প্রশ্নের উত্তর ইতিমধ্যে অন্যান্য পোস্টারদের দ্বারা জবাব দেওয়া হয়েছিল, আমি কেবল এটি উল্লেখ করতে চাই

 delete from table where id <> 2

(বা এর রূপগুলি, আইডি = 2 ইত্যাদি নয়) সারণি মুছবে না যেখানে আইডি NULL রয়েছে।

আপনি যদি id = NULL দিয়ে সারিগুলি মুছতে চান তবে:

delete from table where id <> 2 or id is NULL

12
delete from table where id <> 2



সম্পাদনা: মাইএসকিউএল এর বাক্য গঠন সংশোধন করতে


12

আপনি নিম্নলিখিত করতে পারেন:

DELETE * FROM table WHERE NOT(id = 2);

4
মানটি যদি সংখ্যা না হয় তবে ভাল কাজ করে (যেখানে আইডি = 'দুই');
করিম


7

আনুষ্ঠানিক যুক্তি এবং বীজগণিত ফিরে দেখুন। মত একটি অভিব্যক্তি

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
       )

কোনটা ভাল? এটি একটি খুব প্রসঙ্গে সংবেদনশীল প্রশ্ন। শুধু আপনি যে সিদ্ধান্ত নিতে পারেন।

তবে সচেতন থাকুন যে নোটের ব্যবহারটি অপ্টিমাইজার কী করতে পারে বা কী করতে পারে তা প্রভাবিত করতে পারে। আপনি সর্বোত্তম ক্যোয়ারী পরিকল্পনার চেয়ে কম পেতে পারেন।



4

হ্যাঁ. স্মৃতি যদি আমাকে পরিবেশন করে তবে তা কাজ করা উচিত। আমাদের আপনি ব্যবহার করতে পারেন:

DELETE FROM table WHERE id <> 2

3

সেরা সমাধান ব্যবহার করা হয়

DELETE FROM table WHERE id NOT IN ( 2 )

0

আমি কেবল এই সমস্যাটি সমাধান করছিলাম। যদি আপনি <> ব্যবহার করেন বা কোনও ভেরিয়েবলের মধ্যে না রাখেন তবে তা নাল, ফলস্বরূপ মিথ্যা হবে। সুতরাং <> 1 এর পরিবর্তে আপনার অবশ্যই এটি দেখতে হবে:

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