जब भी मुझे किसी तालिका में किसी पंक्ति के अस्तित्व की जाँच करने की आवश्यकता होती है, तो मैं हमेशा एक शर्त लिखता हूँ:
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 *?
क्या कोई कोने का मामला है जहां यह उसी तरह व्यवहार नहीं करता है?हालाँकि मैंने जो लिखा है वह (AFAIK) मानक SQL है: क्या विभिन्न डेटाबेस / पुराने संस्करणों के लिए ऐसा अंतर है?
क्या एंटीजन लिखने में एक्सप्लोसिव पर कोई फायदा है?
क्या समकालीन योजनाकार / आशावादी लोग इसेNOT EXISTSखंड से अलग मानते हैं ?



EXISTS (SELECT FROM ...)।