2010-06-04 52 views
35

मैं दो तालिकाओंएक मूल्य है, जहां यह एक और तालिका में मौजूद नहीं है का चयन

तालिका A है:

ID 
1 
2 
3 
4 

टेबल बी:

ID 
1 
2 
3 

मैं दो अनुरोध है:

  • मैं तालिका ए में सभी पंक्तियों का चयन करना चाहता हूं कि तालिका बी नहीं है ve, जो इस मामले में पंक्ति 4 है।
  • मैं तालिका बी के सभी पंक्तियों को हटाना चाहता हूं।

मैं एसक्यूएल सर्वर का उपयोग कर रहा 2000.

उत्तर

60

आप NOT IN इस्तेमाल कर सकते हैं:

SELECT A.* FROM A WHERE ID NOT IN(SELECT ID FROM B) 

हालांकि, इस बीच मैं NOT EXISTS पसंद करते हैं:

SELECT A.* FROM A WHERE NOT EXISTS(SELECT 1 FROM B WHERE B.ID=A.ID) 

वहाँ अन्य विकल्प के रूप में अच्छी तरह से कर रहे हैं, इस लेख बहुत अच्छी तरह से सभी के फायदे और नुकसान बताते हैं:

Should I use NOT IN, OUTER APPLY, LEFT OUTER JOIN, EXCEPT, or NOT EXISTS?

+0

अच्छा काम करता है में नहीं है! बहुत धन्यवाद .. –

+0

अच्छा लेख को हटाना होगा सिवाय एसक्यूएल सर्वर 2000 – Li3ro

1
select ID from A where ID not in (select ID from B); 

या

select ID from A except select ID from B; 

आपका दूसरा प्रश्न:

delete from A where ID not in (select ID from B); 
+1

, धन्यवाद –

21

अपने पहले प्रश्न के लिए वहाँ से चुनने के लिए कम से कम तीन सामान्य तरीके हैं:

  • मौजूद नहीं
  • नहीं
  • में
  • बायाँ शामिल हों

एसक्यूएल इस तरह दिखता है:

SELECT * FROM TableA WHERE NOT EXISTS (
    SELECT NULL 
    FROM TableB 
    WHERE TableB.ID = TableA.ID 
) 

SELECT * FROM TableA WHERE ID NOT IN (
    SELECT ID FROM TableB 
) 

SELECT TableA.* FROM TableA 
LEFT JOIN TableB 
ON TableA.ID = TableB.ID 
WHERE TableB.ID IS NULL 

जो डेटाबेस का उपयोग कर रहे के आधार पर, प्रत्येक के प्रदर्शन भिन्न हो सकते हैं। SQL Server (नल नहीं कॉलम) के लिए:

नहीं मौजूद है और नहीं विधेय में, लापता मूल्यों के लिए खोज करने के लिए जब तक सवाल में दोनों स्तंभ शून्य नहीं हैं सबसे अच्छा तरीका है।

-1
SELECT ID 
    FROM A 
WHERE ID NOT IN (
     SELECT ID 
     FROM B); 

SELECT ID  
    FROM A a 
WHERE NOT EXISTS (
     SELECT 1 
     FROM B b 
     WHERE b.ID = a.ID) 

  SELECT a.ID 
      FROM A a  
LEFT OUTER JOIN B b 
      ON a.ID = b.ID  
      WHERE b.ID IS NULL 

DELETE 
    FROM A 
WHERE ID NOT IN (
     SELECT ID 
     FROM B) 
+0

क्या यह वाक्यविन्यास मान्य है? ऐसा नहीं होना चाहिए जहां आईडी (...) नहीं है? – Behrang

+0

यह काम नहीं करेगा। सही वाक्यविन्यास होना चाहिए: 'जहां से आईडी आईडी नहीं है (बी से चयन आईडी); ' – kamasheto

3

यह आपके मामले में 4 का चयन करेंगे

SELECT ID FROM TableA WHERE ID NOT IN (SELECT ID FROM TableB) 

इससे उन्हें

DELETE FROM TableA WHERE ID NOT IN (SELECT ID FROM TableB) 
+1

EXCEPT SQL Server 2000 का हिस्सा नहीं है। –

0
SELECT ID 
    FROM A 
WHERE NOT EXISTS(SELECT 1 
        FROM B 
        WHERE B.ID = A.ID 
       ) 
संबंधित मुद्दे