आरंभ करने के लिए, select *
. के बाद अल्पविराम संबंधित नहीं है।
दूसरा, आप अपने टेबल को उपनाम देते हैं (table_2 t
और table_1 a
), लेकिन फिर आप लगातार उपनामों का उपयोग नहीं करते हैं, इसलिए आपको रन टाइम में समस्या हो सकती है। रखरखाव के नजरिए से भी, मुझे लगता है कि अधिकांश लोग घोषित होने पर उपनाम का उपयोग करना पसंद करते हैं, और अन्यथा कोई उपनाम नहीं।
तीसरा, आप बाहरी चयन ('smith' in (t.column1, t.column2)
में t तालिका के कॉलम से तुलना करते हैं। ), जब वह अनावश्यक प्रतीत होता है। आप इसे बाहरी चयन में ही कर सकते हैं। दूसरे शब्दों में, आप उस टर्मिनल पैरेन को AND ('smith'
. से पहले ले जा सकते हैं ...
यह काम करता है या नहीं - मुझे नहीं पता, क्योंकि मुझे नहीं पता कि आप क्या हासिल करने की कोशिश कर रहे हैं।
संयुक्त, जो आपको छोड़ देगा:
SELECT t.*
FROM TABLE_2 t
WHERE EXISTS (SELECT IF(a.column1 = 'smith', a.column2, a.column1)
FROM TABLE_1 a
WHERE 'smith' IN (a.column1, a.column2)
AND a.status = 1)
AND ( 'smith' IN (t.column1, t.column2)