মাইএসকিউএল: একটি কলামটি শূন্য যেখানে সারি নির্বাচন করা হচ্ছে


270

আমার একটি সমস্যা হচ্ছে যেখানে আমি যখন নির্দিষ্ট কলামের জন্য ন্যূনুভূক্ত সারিগুলি নির্বাচন করার চেষ্টা করি তখন এটি একটি খালি সেট দেয়। যাইহোক, যখন আমি পিএইচপিএমওয়াই অ্যাডমিনে টেবিলটি দেখি তখন এটি বেশিরভাগ সারিটির জন্য নਾਲ বলে দেয়।

আমার জিজ্ঞাসাটি এরকম কিছু দেখাচ্ছে:

SELECT pid FROM planets WHERE userid = NULL

খালি প্রতিটি সময় সেট।

অনেক জায়গাগুলি এটি নিশ্চিত করার জন্য বলেছিল যে এটি কোনও আসল মানের পরিবর্তে "নুল" বা "নাল" হিসাবে সঞ্চিত নেই এবং কেউ কেবল একটি স্থান ( userid = ' ') অনুসন্ধান করার চেষ্টা করার কথা বলেছিল তবে এর মধ্যে কোনওটিই কাজ করে নি। মাইআইএসএএম ব্যবহার না করার এবং নির্দোষ ডিবি ব্যবহার না করার জন্য একটি পরামর্শ ছিল কারণ মাইআইএসএএমের নাল সংরক্ষণ করতে সমস্যা হচ্ছে। আমি টেবিলটি নির্দোষ ডিবিতে স্যুইচ করেছি তবে এখন আমার মনে হচ্ছে সমস্যাটি সম্ভবত এটি এখনও রূপান্তরিত হতে পারে না বলে এটি আসলে নਾਲ নয়। আমি টেবিলটিকে নির্দোষ ডিবি বা অন্য কিছু হিসাবে তৈরি না করেই এটি করতে চাই তবে আমার যদি এটি করতে হয় তবে আমি অবশ্যই এটি চেষ্টা করতে পারি।


1
মাইআইএসএএম নাল সংরক্ষণ করতে কোনও সমস্যা নেই। NULL গুলি এর শব্দার্থবিজ্ঞানগুলি ইঞ্জিন থেকে স্বতন্ত্র হওয়া উচিত।
মার্কআর

উত্তর:


512

এসকিউএল NULL এর বিশেষ, এবং আপনাকে করতে হবে WHERE field IS NULL, কারণ NULL কোনও কিছুর সমান হতে পারে না,

নিজেকে সহ (যেমন: NULL = NULL সর্বদা মিথ্যা)।

Https://en.wikedia.org/wiki/Codd%27s_12_rules দেখুনRule 3


24
এটি অজানা - মিথ্যা নয়। এসকিউএল তিনটি মূল্যবান যুক্তি ব্যবহার করে।
মার্টিন স্মিথ

38
নুল = নুল সত্যই মিথ্যা নয় - এটি আবার নাল UL তবে এটি সত্যও নয়, সুতরাং যদি (NULL = NULL) কার্যকর হয় না।
কনারাক

1
অডিও উত্তরটিও দেখুন: 1 টি নির্বাচন করুন <=> 1, নাল <=> নুল, 1 <=> নাল; -> 1, 1, 0
থমাস

কেবল কোনও কিছুর সমান নয়, এটি কোনও কিছুর সমান নয় either অন্য কথায়, বারটি নাল যেখানে সারিগুলি ফেরত select * from foo where bar <> "abc"দেবে না । আজ আমাকে একটি লুপের জন্য ফেলে দিয়েছে। দস্তাবেজগুলি <>" অপরটির সমান নয়" অপারেটর বলে, কিন্তু সত্যই এটি "অপারেটর ব্যতীত অন্য কোনও কিছুর সমান।
স্ট্যাকওভারথ্রো


39

সকলের উত্তর দেওয়া হওয়ায় আমি আরও কিছু যোগ করতে চাই। আমিও একই সমস্যার মুখোমুখি হয়েছি।

আপনার প্রশ্ন ব্যর্থ হয়েছে কেন? তোমার আছে,

SELECT pid FROM planets WHERE userid = NULL;

এটি আপনাকে প্রত্যাশিত ফলাফল দেবে না, কারণ মাইএসকিএল ডক থেকে

এসকিউএল-তে, নুল মানটি অন্য কোনও মানের, এমনকি ন্যূনাল এর সাথে তুলনা করে কখনও সত্য হয় না। অপারেটর এবং এক্সপ্রেশনটির সাথে জড়িত ক্রিয়াকলাপগুলির জন্য ডকুমেন্টেশনে অন্যথায় নির্দেশিত না হওয়া পর্যন্ত একটি এক্সপ্রেশন যা NULL থাকে সর্বদা একটি NULL মান উত্পাদন করে।

জোর আমার।

কলামের মানগুলি যা অনুসন্ধান NULLকরতে আপনি কোনও expr = NULLপরীক্ষা ব্যবহার করতে পারবেন না । নিম্নলিখিত বিবৃতিটি কোনও সারি দেয় না, কারণ expr = NULLকোনও অভিব্যক্তির জন্য এটি কখনই সত্য নয়

সমাধান

SELECT pid FROM planets WHERE userid IS NULL; 

পরীক্ষা করার জন্য NULL, IS NULLএবং IS NOT NULLঅপারেটরগুলি ব্যবহার করুন ।


17

এখানে একটা ব্যাপার <=>অপারেটর:

SELECT pid FROM planets WHERE userid <=> NULL

কাজ করবে। সুন্দর জিনিসটি হ'ল <=>নন-নুল মানগুলির সাথেও ব্যবহার করা যেতে পারে:

SELECT NULL <=> NULLফলন 1

SELECT 42 <=> 421পাশাপাশি ফলন ।

এখানে দেখুন: https://dev.mysql.com/doc/refman/5.7/en/compistance-operators.html#operator_equal-to


11

Http://w3schools.com/sql/sql_null_values.asp থেকে তথ্য :

1) নাল মানগুলি অনুপস্থিত অজানা তথ্য উপস্থাপন করে।

2) ডিফল্টরূপে, একটি টেবিল কলামে ন্যূনু মান ধারণ করতে পারে।

3) ন্যূন মানগুলি অন্য মানগুলির থেকে পৃথকভাবে বিবেচিত হয়

4) NUL এবং 0 এর তুলনা করা সম্ভব নয়; তারা সমতুল্য নয়।

5) তুলনা অপারেটরগুলির সাথে যেমন =, <, বা <> এর সাথে NULL মানগুলির পরীক্ষা করা সম্ভব নয়।

)) আমাদের পরিবর্তে IS NULL এবং NULL অপারেটরগুলি ব্যবহার করতে হবে

সুতরাং আপনার সমস্যার ক্ষেত্রে:

SELECT pid FROM planets WHERE userid IS NULL

7

কোয়েরিতে একই সমস্যা ছিল:

SELECT * FROM 'column' WHERE 'column' IS NULL; 

কোন মূল্য ফেরত। মাইআইএসএএম এর সাথে একটি সমস্যা বলে মনে হচ্ছে এবং ইনোডিবিতে ডেটাতে একই ক্যোয়ারী প্রত্যাশিত ফলাফল প্রত্যাবর্তন করেছে।

সঙ্গে গিয়েছিলাম:

SELECT * FROM 'column' WHERE 'column' = ' '; 

সমস্ত প্রত্যাশিত ফলাফল ফিরিয়ে দিয়েছে।



0

অ্যাক্সেস থেকে মাইএসকিউএলে ডাটাবেসগুলি রূপান্তর করার সময় আমার একই সমস্যা ছিল (ডাটাবেসের সাথে যোগাযোগের জন্য vb.net ব্যবহার করে)।

আমার যদি ক্ষেত্রের (ক্ষেত্রের ধরণের বারচর (1)) নাল ছিল তবে মূল্যায়ন করা দরকার।

এই বিবৃতিটি আমার দৃশ্যের জন্য কাজ করেছে:

SELECT * FROM [table name] WHERE [field name] = ''

1
যদি এটি আপনার পক্ষে কাজ করে তবে আপনার বর্ণচর্চা (1) এর জন্য ডিফল্টটি বাতিল হয়ে যাওয়ার পরিবর্তে '', সুতরাং এই প্রশ্নের সাথে সম্পর্কিত নয়।
さ り げ な い 告白
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.