যখনই আমার কোনও টেবিলে কিছু সারিটির অস্তিত্বের জন্য যাচাই করা দরকার, আমি সর্বদা একটি শর্ত লেখার প্রবণতা রাখি:
SELECT a, b, c
FROM a_table
WHERE EXISTS
(SELECT * -- This is what I normally write
FROM another_table
WHERE another_table.b = a_table.b
)
অন্য কিছু লোক এটি লিখেন:
SELECT a, b, c
FROM a_table
WHERE EXISTS
(SELECT 1 --- This nice '1' is what I have seen other people use
FROM another_table
WHERE another_table.b = a_table.b
)
যখন শর্তটি NOT EXISTS
পরিবর্তে হয় EXISTS
: কিছু ক্ষেত্রে, আমি এটি একটি LEFT JOIN
এবং একটি অতিরিক্ত শর্ত দিয়ে লিখতে পারি (কখনও কখনও অ্যান্টিজাইন বলা হয় ):
SELECT a, b, c
FROM a_table
LEFT JOIN another_table ON another_table.b = a_table.b
WHERE another_table.primary_key IS NULL
আমি এটি এড়াতে চেষ্টা করি কারণ আমার মনে হয় অর্থটি কম স্পষ্ট হয়েছে, বিশেষত যখন আপনার primary_key
কী তা স্পষ্ট নয় বা যখন আপনার প্রাথমিক কী বা আপনার যোগদানের শর্তটি বহু-কলাম হয় (এবং আপনি সহজেই একটি কলামটি ভুলে যেতে পারেন)। তবে, কখনও কখনও আপনি অন্য কারও দ্বারা লিখিত কোড বজায় রাখেন ... এবং এটি ঠিক সেখানে রয়েছে।
এর পরিবর্তে কি কোনও পার্থক্য (শৈলী ব্যতীত) ব্যবহার করতে
SELECT 1
হবেSELECT *
?
এমন কোনও কর্নার কেস আছে যেখানে এটি একই রকম আচরণ করে না?যদিও আমি যা লিখেছি তা হ'ল (এএফআইএকি) স্ট্যান্ডার্ড এসকিউএল: বিভিন্ন ডাটাবেস / পুরানো সংস্করণগুলির জন্য কি এইরকম পার্থক্য রয়েছে?
অ্যান্টিজোইন লেখার স্পষ্টত্বে কোনও লাভ আছে কি?
সমসাময়িক পরিকল্পনাকারী / অপ্টিমাইজাররা কি এইNOT EXISTS
ধারাটি থেকে আলাদা আচরণ করে ?
EXISTS (SELECT FROM ...)
।