2012-02-27 6 views
5

की तरह नहीं, मैं, mysql में कैसे जांच सकता हूं कि किसी अन्य तालिका में किसी फ़ील्ड के अंदर कोई मान है या नहीं?MySQL -

SELECT * FROM table WHERE concat('%',value,'%') NOT LIKE IN(SELECT field FROM anothertable) 

लेकिन मैं जो पूरी तरह ठीक है, यह है नहीं लगता है जैसे कुछ?

उत्तर

2

निम्नलिखित क्वेरी को यह करना चाहिए।

SELECT DISTINCT t.* 
FROM table t, 
     anothertable a 
WHERE a.field NOT LIKE Concat('%', t.`value`, '%'); 
+0

क्या यह किसी भी तरह से तेज़ या बेहतर होगा? –

+0

हां, यदि फ़ील्ड और मान अनुक्रमित हैं तो यह बहुत तेज होगा –

+0

मैंने दोनों की तुलना की, यह पहले 4 गुना तेज है। –

2

नहीं, बिल्कुल नहीं।

SELECT * FROM table WHERE NOT EXISTS (
    SELECT * from anothertable WHERE field LIKE CONCAT('%',value,'%') 
) 

शायद यह करेगा। मान लें कि valuetable पर एक कॉलम है, और fieldanothertable पर संबंधित कॉलम है जो एक सबस्ट्रिंग के रूप में value हो सकता है या नहीं हो सकता है।

चेतावनी दी जानी चाहिए, हालांकि - यह बहुत धीमी क्वेरी होगी, अगर anothertable में कई पंक्तियां हैं। मुझे नहीं लगता कि एक सूचकांक है जो आपकी मदद कर सकता है। table में प्रत्येक पंक्ति के लिए MySQL को anothertable की एक स्ट्रिंग-तुलना तालिका स्कैन करना होगा।

+0

मैं लगा यह धीमी गति से हो जाएगा , लेकिन मैं सिर्फ एक बार रखरखाव क्वेरी चला रहा हूँ। –

+0

बीटीडब्ल्यू, मैंने अभी एक टाइपो के लिए अपडेट किया है - उप-क्वेरी में 'LIKE' के स्थान पर मुझे 'पसंद नहीं आया' था। –

+0

हाँ, मैंने उस टाइपो को पकड़ा। –

0

अगर मैं आपके सवाल का सही ढंग से समझ (आप (field2) "anothertable" में 2 क्षेत्रों में मेज से मूल्य फ़ील्ड 1 और पता लगाने के लिए यह सोचते हैं करना चाहते हैं):

SELECT * 
FROM table t 
WHERE EXISTS (SELECT Count(*) FROM anothertable WHERE field1 LIKE concat('%',t,value,'%') OR field2 LIKE concat('%',t,value,'%')