NULL সমেত একটি সেট কেন অন্তর্ভুক্ত নয় কেন সর্বদা মিথ্যা / NULL ফেরত দেয়?


21

আমার একটি কোয়েরি ছিল (পোস্টগ্রিস এবং ইনফর্মিক্সের জন্য) এমন একটি NOT INধারা যার সাথে একটি সাবকোয়ারি রয়েছে যা কিছু ক্ষেত্রে NULLমানগুলি ফিরিয়ে দেয় , যার ফলে সেই ধারা (এবং পুরো ক্যোয়ারী) কিছু ফেরত দিতে ব্যর্থ হয়।

এটি বোঝার সর্বোত্তম উপায় কী? আমি মানহীন NULLকিছু হিসাবে ভেবেছিলাম , এবং তাই কোয়েরিটি ব্যর্থ হওয়ার প্রত্যাশা করছিল না, তবে অবশ্যই এটি ভাবার সঠিক উপায় নয় NULL

উত্তর:


29

বুলিয়ান যুক্তি - বা তিনটি মূল্যবান যুক্তি

  • IN শর্তের একটি সিরিজের শর্টহ্যান্ড is
  • x NOT IN (1, 2, NULL) এটার মতই NOT (x = 1 OR x = 2 OR x = NULL)
  • ... এটার মতই x <> 1 AND x <> 2 AND x <> NULL
  • ... true AND true AND unknown** হিসাবে একই
  • ... = unknown**
  • ... যা প্রায়শই একই falseক্ষেত্রে যেমন এটি WHEREশর্তটি পাস করবে না **

এখন, এই কেন লোক ব্যবহার EXISTS+ + NOT EXISTSবদলে IN+ + NOT IN। আরও তথ্যের জন্য সূচির সাথে যুক্তি যুক্তির ব্যবহার দেখুন

** দ্রষ্টব্য: শর্তে অভিব্যক্তিটির শেষে unknownএকই । অভিব্যক্তিটি মূল্যায়ন করা হচ্ছে, তবে এটি অজানা কারণ @ কেজিরিটনের মন্তব্য নীচে দেখুনfalseWHERE


10
এমনকি স্পষ্টির সাথে এটি প্রযুক্তিগতভাবে ভুল, এবং এমন কোনও উপায়ে কাউকে পোড়াতে পারে। উদাহরণস্বরূপ, আপনি যদি x <> NULLসমাধান হিসাবে দেখেন তবে আপনি মূল্যায়নের FALSEআশা NOT (x <> NULL)করতে পারেন TRUE, এবং তা হয় না। উভয় মূল্যায়ন UNKNOWN। কৌতুক যে শুধুমাত্র যদি একটি সারিতে নির্বাচিত হয় WHEREদফা (যদি থাকে) মূল্যায়ণ করতে TRUEএকটি সারিতে যদি দফা মূল্যায়ন হয় বাদ দেওয়া হয় - FALSEবা UNKNOWN। এই আচরণটি (সাধারণভাবে NOT INএবং বিশেষত শিকারীর জন্য ) এসকিউএল স্ট্যান্ডার্ড দ্বারা বাধ্যতামূলক করা হয়।
কেজিগ্রিটন

এছাড়াও NULL NOT IN (some_subquery)ব্যতীত যদি বাইরের সারি আসতে করা উচিত নয় some_subqueryকোনো সারি ফেরত দেয় না। এই কারণেই যখন উভয় কলাম নাল-সক্ষম হয় তখন কার্যকর করার পরিকল্পনাটি আরও ব্যয়বহুল হতে পারে। এসকিউএল সার্ভার উদাহরণ
মার্টিন স্মিথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.