একটি টেবিলের মধ্যে ন্যূনু স্ব স্ব তুলনা


13

আমি নীচের মতো কিছু রহস্যময় টি-স্কিল আচরণ সম্পর্কে সর্বদা বিস্মিত হই

-- Create table t and insert values.  
use tempdb
CREATE TABLE dbo.t (a INT NULL);  
-- insert 3 values
INSERT INTO dbo.t values (NULL),(0),(1);  
GO  
set ansi_nulls off -- purposely turn off, so we can allow NULL comparison, such as null = null
go
-- expect 3 rows returned but only 2 returned (without null value row)
select * from dbo.t where a = a 

এটি কোনও টেবিলে সমস্ত সারি কীভাবে পুনরুদ্ধার করবেন এবং এএনএসআই_এনএলএলএস ব্যবহার এড়ানো সম্পর্কে নয়।

আমি কেবল কিছু অন্তর্দৃষ্টি জিজ্ঞাসা করতে চাই কেন টি-স্কেল এইরকম আচরণ করে।

উত্তর:


13

এটি একটি আশ্চর্যজনক আচরণ তবে এমএসডিএন পৃষ্ঠা থেকে SET ANSI_NULLS, আমরা কমপক্ষে জানতে পারি যে এটি প্রত্যাশিত আচরণ। আর কখনও ব্যবহার না করার আরও একটি কারণ ANSI_NULLS OFF:

SET ANSI_NULLSতুলনার প্রভাব কেবলমাত্র যদি তুলনার অপারেটরগুলির মধ্যে একটি হয় হয় একটি চলক NULLবা আক্ষরিক NULLযদি তুলনার উভয় দিক কলাম বা যৌগিক এক্সপ্রেশন হয় তবে সেটিংটি তুলনাটিকে প্রভাবিত করে না।


8

যদিও এটি এমএসডিএন ডকুমেন্টেশন থেকে স্ফটিক পরিষ্কার নয়, তবে আমি বিশ্বাস করি যে আপনি নিম্নলিখিতটি সত্য বলে খুঁজে পাবেন find

"সেট এএনএসআই_নুলস কেবল তখনই তুলনাটিকে প্রভাবিত করে যদি তুলনাটির অপারেটরগুলির মধ্যে একটি হয় নূনুল বা আক্ষরিক ন্যূয়াল হয় the

এই /programming/2866714/how-does-ansi-nulls-work-in-tsql দেখুন


ধন্যবাদ স্কট এবং ইপারকিউব, আপনার উত্তর উভয়ই এই আচরণের পয়েন্টগুলিতে, সুতরাং আমি আপনার উত্তর দুটিই আপভোট করেছি।
jyao

ইপারকিউব প্রথম ছিল :)
স্কট

4

2015 এর পরের পোস্টে রবার্ট শেল্ডন নুল আচরণ এবং তাদের কেন কখনও কখনও (তবে সর্বদা নয়) ব্যর্থ হয়

https://www.simple-talk.com/sql/t-sql-programming/how-to-get-nulls-horribly-wrong-in-sql-server/

তিনি 13 টি নুল ব্যর্থতা বর্ণনা করেছেন যা কোনও প্রোগ্রামার সহজেই ভ্রমণ করতে পারেন।

ব্যর্থতা # 1: নুল অর্থ কী তা জেনে নেই

ব্যাখ্যা: NULL একটি অ-মান, একটি অস্তিত্বহীন মান। এটি শূন্য নয়। এটি কোনও খালি স্ট্রিং নয়। একটি মান NUL এর সমান হতে পারে না। কোনও দুটি NULL মান সমান নয়

এটিই মূল সমস্যা, তবে অন্যান্য ব্যর্থতাগুলি সম্পর্কে অবশ্যই ভুলবেন না।

হ্যাঁ, পূর্ববর্তী সংস্করণগুলি (প্রাক-এসকিউএল সার্ভার 7 আমি বিশ্বাস করি) আপনি যা চান তার চেয়ে আরও আলাদা আচরণ করে।

তবে, আপনি স্ট্যাক ওভারফ্লো এবং স্ট্যাক এক্সচেঞ্জে ইস্যুটি অনুসন্ধান করলে আপনি সমস্যাগুলি নিয়ে দীর্ঘ আলোচনা করতে বহু দীর্ঘ থ্রেড পাবেন।


3
আমি একবার রবার্ট শেল্ডনের লিঙ্কযুক্ত পোস্টটি পড়েছি, তবে এটিতে (আইএমএইচও) কোনও তত্ত্ব বা প্রমাণ নেই যা আমার উদাহরণের আচরণের ব্যাখ্যা দেয়।
jyao

1
"কোনও দুটি NULL মান সমান নয়" " ঠিক আছে তবে এমন কি এমন লোকেরাও জানে যে আনসিস নালস বন্ধ হয়ে গেলে বিপরীত আশা করবে। বিশেষত কারণ WHERE NULL = NULLযখন সেটিংস হয় তখন ফলন সত্য।
ypercubeᵀᴹ

1

আলোচনায় যুক্ত করতে, এসকিউএল 92 স্ট্যান্ডার্ডের এনইউএল এর সংজ্ঞাটি অস্পষ্টভাবে ব্যাখ্যা করা যেতে পারে। এখানে স্কিউলাইট.আর.আর সৌজন্যে বিভিন্ন ডিবিএমএসের NULL হ্যান্ডলিং এবং ব্যাখ্যাটির একটি ভাল সংক্ষিপ্তসার

প্রকাশ করুন : আমি এসকিউএল 92 এর "অস্পষ্টতা" সম্পর্কে উপরের লিঙ্কযুক্ত স্ক্যালাইট.অর্গ পৃষ্ঠার একটি পুরানো সংস্করণ (যেমন 6-8 বছর আগে) থেকে পড়ার কথা মনে করি, তবে সেই পৃষ্ঠাটি আপডেট করা হয়েছে।

উপরের আরএলএফ এর উত্তরের একটি ভাল উদ্ধৃতি রয়েছে, তবে আমি যদি রবার্ট শেল্ডনের সাথে একমত নই তবে এটি কেবল কারণ যে আমি "এমন কিছু যার অস্তিত্ব নেই" (অর্থাত্ একটি এনইউএল ) দার্শনিকভাবে এবং ইংরেজী-ভাষা-শব্দার্থিকভাবে " অন্য কিছু যা বিদ্যমান নেই তার সমতুল্য" "। আমি শেলডন এর যুক্তিবিজ্ঞান বুঝতে am, তাহলে এক ডিক্লেয়ার পারে শূন্য সংজ্ঞা এছাড়াও শূন্য। (যদি এটি বিদ্যমান না থাকে, তবে আমরা কীভাবে এটি সংজ্ঞায়িত করতে পারি? ভয়ঙ্কর, হাহ?)

আমি রাসেলের প্যারাডক্স পাতানো ( এবং একটি মাথাব্যথার) বিভিন্নতা দেখতে পাচ্ছি । : - \

কিন্তু আবার, এই আলোচনা হয় ইংরেজি ভাষা শব্দার্থবিদ্যা ( না এসকিউএল) এবং দর্শনের বিতর্ক জন্যে এখানে উপর । :-)


পিএস আমি এই এসই সম্প্রদায়ে এখানে নতুন; যদি এটির আগে অ্যাড বমিভাব নিয়ে আলোচনা করা হয় তবে আমি ক্ষমা চাইছি।
pr1268

1
স্ট্যান্ডার্ডে অস্পষ্টতা ঠিক কোথায়?
ypercubeᵀᴹ

@ ইপারকিউবিᵀᴹ: আমি বিশ্বাস করি যে অস্পষ্টতা একটি বুলিয়ান একটি 3 ভিএল "ফিট" করার প্রয়াসে পড়েছিল। টেবিল NUL তুলনা সঙ্গে যোগ দেয় বিভিন্নভাবে ব্যাখ্যা করা যেতে পারে।
pr1268

আমি অসঙ্গতি সম্পর্কে একমত হব তবে অস্পষ্টতার বিষয়ে নয়।
ypercubeᵀᴹ

1
@ ইপারকিউবিᵀᴹ: মোটামুটি ... আমি উপরে উল্লিখিত স্ক্যালিটি.অর্গ পৃষ্ঠার পুরানো সংস্করণটি কেবল উদ্ধৃত করছিলাম ("এসকিউএল 92 ন্যূনাল হ্যান্ডলিং এবং ব্যাখ্যার সাথে অস্পষ্ট" বা এরকম কিছু)। তবে আমার তর্ক করার অর্থ নেই। সম্ভবত sqlite.org পৃষ্ঠাটি নিজেই বিভ্রান্তিমূলক এবং / বা সমস্ত-আউট ভুল ছিল। এটি সম্ভবত কেন আপডেট হয়েছিল তা ব্যাখ্যা করে।
pr1268
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.