2012-07-30 17 views
12

का उपयोग करके "कहां नहीं है" मैं तालिका तालिका 1 से सभी रिकॉर्ड्स चुनना चाहता हूं, जहां कॉलम ए और बी में मान तालिका टी 2 में कॉलम सी और डी के लिए कोई मिलान नहीं है।टी-एसक्यूएल दो कॉलम

mysql “Where not in” using two columns में मैं यह पढ़ सकता हूं कि फॉर्म का चयन करके, ए 1 बी को टी 1 से जहां (ए, बी) में नहीं है (टी 2 से चयन सी, डी), लेकिन यह मेरे लिए टी-एसक्यूएल में विफल रहता है जिसके परिणामस्वरूप "आगे गलत वाक्य रचना ','।"।

तो मैं यह कैसे कर सकता हूं? ,

... 
WHERE 
    NOT EXISTS (
    SELECT * FROM SecondaryTable WHERE c = FirstTable.a AND d = FirstTable.b 
) 

(c, d) वहाँ पर SecondaryTable पर एक समग्र सूचकांक है सुनिश्चित करें कि जब तक कि मेज कई पंक्तियों शामिल नहीं है:

उत्तर

22

एक सहसंबद्ध उप क्वेरी का उपयोग करें।

+0

यह एक उत्कृष्ट विकल्प है! – RolandoCC

+0

काम नहीं करता है। फर्स्टटेबल दूसरे चयन में घोषित नहीं है। –

4

आप WHERE IN टाइप स्टेटमेंट का उपयोग करके ऐसा नहीं कर सकते हैं।

इसके बजाय आप लक्ष्य तालिका (टी 2) पर LEFT JOIN कर सकते हैं और यह चुन सकते हैं कि T2.ID NULL है।

उदाहरण

लिए
SELECT 
    T1.* 
FROM 
    T1 LEFT OUTER JOIN T2 
    ON T1.A = T2.C AND T1.B = T2.D 
WHERE 
    T2.PrimaryKey IS NULL 

केवल टी 1 से पंक्तियों को टी 2 में एक इसी पंक्ति की जरूरत नहीं है वापस आ जाएगी।

+0

मुझे यकीन नहीं है कि मैं समझता हूं लेकिन ऐसा लगता है कि तोमालाक ने मुझे जवाब दिया! धन्यवाद हालांकि! –

1

मैंने इसे माइस्क्ल में उपयोग किया क्योंकि माइस्क्ल में "EXCLUDE" कथन नहीं है।

इस कोड:

  1. Concates यह आसान कॉलम तुलना करने के लिए बनाने के लिए एक नए क्षेत्र में सी और तालिका टी 2 की डी-प्रांगण।
  2. कॉलम की तुलना करना आसान बनाने के लिए तालिका T1 के फ़ील्ड ए और बी को एक नए फ़ील्ड में जोड़ता है।
  3. सभी रिकॉर्ड्स का चयन करता है जहां टी 1 के नए क्षेत्र का मान T2 के नए फ़ील्ड के मान के बराबर नहीं है।

एसक्यूएल-कथन:

SELECT T1.* FROM T1 
    WHERE CONCAT(T1.A,'Seperator', T1.B) NOT IN 
    (SELECT CONCAT(T2.C,'Seperator', T2.D) FROM T2) 
+0

क्या आप समझा सकते हैं कि यह कथन प्रश्न का उत्तर क्यों देता है? –

+0

एफएच-इनवे: मैं कोड से पहले टिप्पणी लिखता हूं। –

+0

धन्यवाद। क्या आप अपनी पहली वाक्य पर एक नज़र डाल सकते हैं, मुझे यकीन नहीं है कि आप इसके साथ क्या कहना चाहते हैं। सवाल टी-एसक्यूएल के बारे में था क्योंकि MySQL 'जहां नहीं है' का समर्थन नहीं करता है। –

संबंधित मुद्दे