table1 (आईडी, नाम)
table2 (आईडी, नाम)
प्रश्न:
SELECT name
FROM table2
-- that are not in table1 already
table1 (आईडी, नाम)
table2 (आईडी, नाम)
प्रश्न:
SELECT name
FROM table2
-- that are not in table1 already
जवाबों:
SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL
प्रश्न : यहाँ क्या हो रहा है?
A : वैचारिक रूप से हम सभी पंक्तियों का चयन करते हैं table1
और प्रत्येक पंक्ति के लिए हम स्तंभ के table2
लिए समान मान के साथ एक पंक्ति खोजने का प्रयास करते हैं name
। यदि ऐसी कोई पंक्ति नहीं है, तो हम table2
अपने परिणाम के भाग को उस पंक्ति के लिए खाली छोड़ देते हैं । फिर हम केवल उन पंक्तियों को उठाकर अपने चयन में बाधा डालते हैं, जहां मिलान पंक्ति मौजूद नहीं है। अंत में, हम अपने परिणाम से सभी क्षेत्रों को अनदेखा कर देते हैं सिवाय name
कॉलम के (जिसे हम सुनिश्चित करते हैं कि मौजूद है, वहां से)table1
)।
हालांकि यह सभी मामलों में सबसे अधिक संभव तरीका नहीं हो सकता है, यह मूल रूप से हर डेटाबेस इंजन में काम करना चाहिए जो एएनएसआई एनसी एसक्यूएल को लागू करने का प्रयास करता है।
आप या तो कर सकते हैं
SELECT name
FROM table2
WHERE name NOT IN
(SELECT name
FROM table1)
या
SELECT name
FROM table2
WHERE NOT EXISTS
(SELECT *
FROM table1
WHERE table1.name = table2.name)
मेरे पास दूसरा उत्तर देने के लिए पर्याप्त प्रतिनिधि नहीं हैं। लेकिन मुझे शीर्ष उत्तर की टिप्पणियों से असहमत होना पड़ेगा। दूसरा जवाब:
SELECT name
FROM table2
WHERE name NOT IN
(SELECT name
FROM table1)
क्या एफएआर व्यवहार में अधिक कुशल है। मुझे पता नहीं क्यों, लेकिन मैं इसे 800k + रिकॉर्ड के खिलाफ चला रहा हूं और अंतर 2 के ऊपर दिए गए उत्तर के लाभ के साथ जबरदस्त है। बस मेरी $ 0.02
यह शुद्ध सेट सिद्धांत है जिसे आप minus
ऑपरेशन के साथ प्राप्त कर सकते हैं ।
select id, name from table1
minus
select id, name from table2
SELECT <column_list>
FROM TABLEA a
LEFTJOIN TABLEB b
ON a.Key = b.Key
WHERE b.Key IS NULL;
https://www.cloudways.com/blog/how-to-join-two-tables-mysql/
नुकसान के लिए बाहर देखो। यदि फ़ील्ड Name
में Table1
Nulls हैं, तो आप आश्चर्य में हैं। बेहतर है:
SELECT name
FROM table2
WHERE name NOT IN
(SELECT ISNULL(name ,'')
FROM table1)
यहाँ क्या मेरे लिए सबसे अच्छा काम किया है।
SELECT *
FROM @T1
EXCEPT
SELECT a.*
FROM @T1 a
JOIN @T2 b ON a.ID = b.ID
यह मेरे द्वारा किए गए किसी भी अन्य तरीके के मुकाबले दोगुना अधिक था।
आप EXCEPT
mssql या MINUS
oracle में उपयोग कर सकते हैं , वे इसके अनुसार समान हैं:
मेरे लिए वह तेज काम करता है
SELECT *
FROM [dbo].[table1] t1
LEFT JOIN [dbo].[table2] t2 ON t1.[t1_ID] = t2.[t2_ID]
WHERE t2.[t2_ID] IS NULL
मैं सही उत्तर में (क्योंकि मैं अभी तक टिप्पणी करने के लिए पर्याप्त शांत नहीं हूं) में जा रहा हूं .... अगर किसी और ने सोचा कि इसे बेहतर व्याख्या की आवश्यकता है।
SELECT temp_table_1.name
FROM original_table_1 temp_table_1
LEFT JOIN original_table_2 temp_table_2 ON temp_table_2.name = temp_table_1.name
WHERE temp_table_2.name IS NULL
और मैंने MySQL में टेबल नामों के बीच से कॉमाक्स की जरूरत में सिंटैक्स देखा है, लेकिन sqlLite में यह स्थान पसंद करने के लिए लग रहा था।
लब्बोलुआब यह है कि जब आप खराब चर नामों का उपयोग करते हैं तो यह प्रश्न छोड़ देता है। मेरे चरों को अधिक समझ में आना चाहिए। और किसी को यह समझाना चाहिए कि हमें अल्पविराम या कोई अल्पविराम क्यों चाहिए।
यदि आप विशिष्ट उपयोगकर्ता में चयन करना चाहते हैं
SELECT tent_nmr FROM Statio_Tentative_Mstr
WHERE tent_npk = '90009'
AND
tent_nmr NOT IN (SELECT permintaan_tent FROM Statio_Permintaan_Mstr)
tent_npk
एक उपयोगकर्ता के एक प्राथमिक कुंजी है