মধ্যে পার্থক্য কি IN
এবং ANY
পোস্টগ্রি মধ্যে অপারেটর?
উভয়ের কাজের ব্যবস্থা একই বলে মনে হচ্ছে। কেউ কি উদাহরণ দিয়ে ব্যাখ্যা করতে পারেন?
মধ্যে পার্থক্য কি IN
এবং ANY
পোস্টগ্রি মধ্যে অপারেটর?
উভয়ের কাজের ব্যবস্থা একই বলে মনে হচ্ছে। কেউ কি উদাহরণ দিয়ে ব্যাখ্যা করতে পারেন?
উত্তর:
( IN
না ANY
হয় "অপারেটর" বা একটিও নয় A "কন্সট্রাক্ট" বা "সিনট্যাক্স উপাদান"))
যৌক্তিকভাবে , ম্যানুয়ালটি উদ্ধৃত করে :
IN
সমতূল্য= ANY
।
কিন্তু দুটি বাক্য গঠন রূপগুলো এর IN
এবং দুই রূপগুলো ANY
। বিবরণ:
IN
একটি গ্রহণ সেট সমতূল্য = ANY
একটি গ্রহণ সেট এখানে প্রদর্শিত:
তবে প্রত্যেকের দ্বিতীয় রূপটি অন্যটির সমতুল্য নয়। ANY
কনস্ট্রাক্টের দ্বিতীয় ভেরিয়েন্টটি একটি অ্যারে নেয় (অবশ্যই একটি প্রকৃত অ্যারে প্রকারের হওয়া আবশ্যক), যখন দ্বিতীয় রূপটি IN
একটি কমা-বিভাজিত মানগুলির তালিকা গ্রহণ করে । এটি মানগুলিতে পাস করার ক্ষেত্রে বিভিন্ন বিধিনিষেধের দিকে পরিচালিত করে এবং বিশেষ ক্ষেত্রে বিভিন্ন প্রশ্নের পরিকল্পনা তৈরি করতে পারে:
=any()
তবে সাথে ব্যবহার করা হচ্ছেin
ANY
আরও বহুমুখীANY
যেমন বিভিন্ন অপারেটর, শুধু সঙ্গে মিলিত হতে পারে কনস্ট্রাক্ট, অনেক বেশী বহুমুখী =
। উদাহরণ:
SELECT 'foo' LIKE ANY('{FOO,bar,%oo%}');
বিপুল সংখ্যক মানগুলির জন্য, প্রতিটিের জন্য একটি সেট স্কেল আরও ভাল সরবরাহ করা:
সম্পর্কিত:
" id
প্রদত্ত অ্যারেতে সারিগুলি সন্ধান করুন":
SELECT * FROM tbl WHERE id = ANY (ARRAY[1, 2]);
ইনভার্সান: "সারি কোথায় id
হয় না অ্যারের মধ্যে":
SELECT * FROM tbl WHERE id <> ALL (ARRAY[1, 2]);
SELECT * FROM tbl WHERE id <> ALL ('{1, 2}'); -- equivalent array literal
SELECT * FROM tbl WHERE NOT (id = ANY ('{1, 2}'));
তিনটি সমতুল্য। অ্যারে কনস্ট্রাক্টর সহ প্রথমটি , অন্য দুটি অ্যারে আক্ষরিক সহ । তথ্য প্রকারটি নির্বিঘ্নে প্রসঙ্গ থেকে নেওয়া যেতে পারে। অন্যথায়, যেমন একটি স্পষ্ট কাস্ট প্রয়োজন হতে পারে '{1,2}'::int[]
।
সহ সারিগুলি id IS NULL
এই মত প্রকাশের কোনওটিই পাস করে না। NULL
অতিরিক্তভাবে মান অন্তর্ভুক্ত করতে :
SELECT * FROM tbl WHERE (id = ANY ('{1, 2}')) IS NOT TRUE;
SELECT * from mytable where id in (1, 2, 3)
সর্বদা একই সারিগুলির মতো হবে SELECT * from mytable where id = ANY('{1, 2, 3}')
, এমনকি যদি তাদের সম্ভাব্যভাবে বিভিন্ন প্রশ্নের পরিকল্পনা থাকতে পারে।
ANY
!=
অপারেটরের সাথে একত্রিত করা যায় না । আমি মনে করি না এটি নথিভুক্ত, তবে এর select * from foo where id != ANY (ARRAY[1, 2])
মতো নয় select * from foo where id NOT IN (1, 2)
। অন্যদিকে, select * from foo where NOT (id = ANY (ARRAY[1, 2]))
প্রত্যাশার মতো কাজ করে।
ANY
সাথে একত্রিত হতে পারে !=
। তবে এটি আরও আছে। আমি উপরে একটি অধ্যায় যোগ করেছি। (নোট যে <>
মান SQL এর যে অপারেটর হয় - যদিও !=
। Postgres ভাল হিসাবে গ্রহণ করা হয়)
NULL
মানগুলি কীভাবে কাজ করে? চান WHERE id = ANY (ARRAY[1, 2]) OR id IS NULL;
ঠিক যেমন ভাল কাজ করে?
(id = ...) IS NOT TRUE
কাজ করে কারণ একটি আসল ম্যাচ আছে কিনা তা id = ...
কেবল মূল্যায়ন করে TRUE
। ফলাফল FALSE
বা NULL
আমাদের পরীক্ষা পাস। দেখুন: স্ট্যাকওভারফ্লো . com / a / 23767625 / 939860 । আপনার যুক্ত হওয়া এক্সপ্রেশনটি অন্য কোনও কিছুর জন্য পরীক্ষা করে। এটি সমতুল্য হবেWHERE id <> ALL (ARRAY[1, 2]) OR id IS NULL;
দুটি সুস্পষ্ট পয়েন্ট এবং পাশাপাশি অন্য উত্তরের বিষয়গুলিও রয়েছে:
সাব কোয়েরি ব্যবহার করার সময় এগুলি হুবহু সমমান:
SELECT * FROM table
WHERE column IN(subquery);
SELECT * FROM table
WHERE column = ANY(subquery);
অন্য দিকে:
কেবল IN
অপারেটর একটি সাধারণ তালিকা মঞ্জুরি দেয়:
SELECT * FROM table
WHERE column IN(… , … , …);
মনে হয় তারা হুবহু হ'ল ANY
তালিকার সাথে কাজ করে না ভুলে গিয়ে বেশ কয়েকবার আমাকে ধরে ফেলেছে ।