2011-11-03 23 views
8

मैं दो सरल टेबल है: (यहाँ केवल "आईडी" स्तंभ)दो एसक्यूएल टेबल की तुलना करें और गायब आईडी वापस करें?

table1:

id 
1 
2 
3 
4 

table2:

id 
2 
4 

एसक्यूएल क्वेरी लापता के लिए दो तालिकाओं की तुलना करनी चाहिए " आईडी "तालिका 2 में और वापसी: 1,2

कोई विचार? :) स्व

+0

अभी तक, सभी उत्तरों केवल यह दिखाते हैं कि तालिका 1 में तालिका 1 में क्या हैं। क्या आपको ऐसी क्वेरी की कोई आवश्यकता है जो कॉलम 1 में गायब होने वाली तालिका 2 में सभी को वापस कर देगी? –

+0

हाय पॉल, नहीं - एक ही रास्ता केवल मुझे चाहिए। – MilMike

+1

कीवर्ड 'EXCEPT' है। MySQL इस ऑपरेशन का समर्थन नहीं करता है, लेकिन खोजों में इसका उपयोग करके कार्य-abouts और अतिरिक्त दृष्टिकोण के लिए बहुत सारे परिणाम लौटाएंगे। (यह प्रश्न समय-समय पर आता है।) –

उत्तर

26

वहाँ त्वचा के लिए कई तरीके इस बिल्ली हैं:

SELECT table1.ID 
FROM  table1 
WHERE  table1.ID NOT IN(SELECT table2.ID FROM table2) 

या आप एक बाएं बाहरी इस्तेमाल कर सकते हैं में शामिल होने:

SELECT   table1.ID 
FROM   table1 
LEFT OUTER JOIN table2 ON table1.ID = table2.ID 
WHERE   table2.ID IS NULL 
+0

मैं सुझाव देता हूं कि आप पहली आईडी में टेबल नाम उपसर्ग का उपयोग करें ताकि यह स्पष्ट किया जा सके कि कौन सा आईडी फ़ील्ड आपका मतलब है, अगर केवल इसलिए कि अगर आप इसे विस्तारित करते हैं तो इसे पढ़ने में बहुत भ्रमित हो जाएगा बाद में। – Polynomial

+0

@ पॉलिनोमियल, सहमत और अपडेट किया गया। –

+1

साल पहले। लेकिन अभी भी मदद करते हैं। भाग्यशाली मुझे आपका उत्तर मिला: डी thx –

2
select t1.* 
from table1 t1 
left outer join table2 t2 on t1.id = t2.id 
where t2.id is null 
+1

@ राइहान क्योंकि बाएं आउटर किसी दिए गए टी 1 के लिए टी 2 से "कोई पंक्ति नहीं" में शामिल हो सकता है (और यह इस दृष्टिकोण के लिए लिंचपिन है)। गायब पंक्तियां ऐसी पंक्तियां हैं जो हैं ... गायब :-) –

+0

डाउनवोट क्यों? – RedFilter

1

इस प्रयास करें:

SELECT table1.id 
FROM  table1 
WHERE  table1.id NOT IN(SELECT table2.id FROM table2) 

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

  • कोई संबंधित समस्या नहीं^_^