2010-01-22 9 views
5

बीआर = 1 के सभी मैचों की तलाश करते समय दो क्षेत्रों ए.पी. और एसी की तालिका बी के बीपी और बीसी की तुलना करते समय मैं तालिका ए से कैसे हटा सकता हूं?एसक्यूएल - अन्य तालिका का जिक्र करते हुए एक टेबल से कैसे हटाना है?

वास्तव में निम्नलिखित काम की न, लेकिन यह दिशा में जाना चाहिए, दुर्भाग्य से मैं समझ नहीं कैसे ...

DELETE FROM A WHERE (A.P = B.P AND A.C = B.C where B.C = 1) 

DELETE FROM A WHERE (SELECT B.P, B.C FROM B WHERE B = 1) 
+0

कौन सा 'RDBMS' प्रयोग कर रहे हैं? – Quassnoi

+0

SQLite ........ – mgmx

उत्तर

2
DELETE 
FROM A 
WHERE EXISTS 
     (
     SELECT NULL 
     FROM b 
     WHERE b.p = a.p 
       AND b.c = a.c 
       AND b.r = 1 
     ) 
+0

@Quassnoi: क्या मेरी क्वेरी तेज नहीं होगी? – Hogan

+0

नहीं, यह नहीं होगा। 'एसक्यूएल सर्वर' में (जो केवल 'आरडीबीएमएस' आपकी क्वेरी काम करेगी), अनइन्डेक्टेड फ़ील्ड 'जॉइन' पर 'IN' या' EXISTS' से कम कुशल है। यदि फ़ील्ड अद्वितीय या अनुक्रमित हैं, तो 'जॉइन' एक ही दक्षता होगी। http://explainextended.com/2009/06/16/in-vs-join-vs-exists/ – Quassnoi

+0

वास्तव में यह पूरी तरह से काम करता है !! SQLite के साथ भी ... – mgmx

4
DELETE FROM A 
FROM A INNER JOIN B ON A.P = B.P AND A.C = B.C 
WHERE B.C = 1 

कभी कभी से डबल लोग दूर फेंक।

+0

दुर्भाग्य से SQLite के साथ काम नहीं करता है। – mgmx

1
DELETE FROM A WHERE A.Id IN 
(SELECT A.Id FROM A INNER JOIN B ON A.P = B.P WHERE B.C = 1) 
0

आप तालिका बी में पंक्ति है सी = 1 और एक ही पी मूल्य में = एक एक सी मूल्य है कि से सभी रिकॉर्ड नष्ट करने के लिए कह रहे हैं सी मूल्य के लिए ??

यह ए में सी पंक्ति = 1 [और तालिका बी में वही पी मान] में सभी पंक्तियों को हटाने जैसा ही है।

तो यह प्रयास करें:

Delete A 
Where C = 1 
    And Exists 
     (Select * From B 
     Where C = 1 
     And P = A.P) 
0

कुछ इस तरह काम करेगा

DELETE FROM A 
FROM A 
INNER JOIN B ON A.P = B.P AND A.C = B.C AND B.R = 1 
संबंधित मुद्दे

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