2011-11-28 12 views
7

यहाँ दो तालिकाओं हैं:किसी तालिका में किसी अन्य तालिका में मानों के आधार पर रिकॉर्ड्स को कैसे हटाएं?

table1

cm_id cost 
1  6.52 
2  16.52 
3  2.12 
4  7.14 
5  19.09 
6  11.52 
7  0.12 

table2

um_id order_num name 
1  517   tommy 
2  518   bobby 
3  519   scotty 
4  520   faris 
5  521   justine 
6  522   sadie 
7  523   nicole 

cm_id और um_id

SELECT table1.cm_id, table1.cost, table2.order_num, table2.order_num 
FROM table1, table2 
WHERE table1.cm_id=table2.um_id; 
लागत प्रत्येक आदेश संख्या से बंधा जा सकता है ताकि एक ही बात का प्रतिनिधित्व करते हैं, यानी

एकल SQL विवरण मैं पंक्तियां हटाना उपयोग कर सकते हैं क्या है तालिका 1 से जहां table2 में order_num 518 और 520 के बीच है?

+2

मेरा मानना ​​है कि यह [आपके प्रश्न का उत्तर] चाहिए (http://stackoverflow.com/questions/439750/t-sql-selecting-rows-to-delete-via- पसंद करते हैं मिलती है)। बस एक जॉइन का उपयोग करें। – Ryan

+0

संदर्भ के लिए धन्यवाद, मुझे बहुत सी सीखने की ज़रूरत है! – user784637

+0

डुप्लिकेट http://stackoverflow.com/questions/1590799/delete-all-rows-in-a-table-based-on-another-table – Igor

उत्तर

15
delete 
from table1 
where cm_id IN (select um_id from table2 where order_num between 518 and 520) 
+4

डेटा की बड़ी संख्या के लिए कुशल नहीं –

+0

क्यों नहीं? क्या कुशल होगा? क्या कोई और तरीका है? – bornfromanegg

1

उपयोग सबक्वेरी साथ DELETE:

DELETE * FROM table1 WHERE table1.cm_id IN (SELECT table2.um_id FROM table2 WHERE order_num>=518 and order_num<=520) 
+0

हटाएं से हटाएं * – Cristiana214

7
DELETE table1 
FROM table1 INNER JOIN table2 ON table1.cm_id = table2.um_id 
AND (table2.order_num BETWEEN 518 AND 520) 

--OR 

DELETE 
FROM table1 
USING table1 INNER JOIN table2 ON table1.cm_id = table2.um_id 
WHERE (table2.order_num BETWEEN 518 AND 520) 

संपादित करें:

डुप्लिकेट FROM था और क्वेरी Andriy M टिप्पणियों के अनुसार बदल दिया गया है।

+0

से यह SQL सर्वर में काम करेगा। [MySQL में] (http://dev.mysql.com/doc/refman/5.0/en/delete.html "MySQL :: MySQL 5.0 संदर्भ मैनुअल :: 12.2.2 हटाएं सिंटेक्स") आपको या तो * ए) चाहिए * पहले 'FROM' या * b) को हटाएं * '' USING' के साथ दूसरे' FROM' को प्रतिस्थापित करें। –

+0

इसके अलावा, ये दो प्रश्न एक-दूसरे से अलग कैसे होते हैं? (। मेरा मतलब है, के अलावा तथ्य यह है कि एक दूसरे के कम रिक्ति से) –

+0

ओह, मैं वास्तव में डाल करने के लिए जहां 2 क्वेरी के लिए खंड, मैं तदनुसार बदल रहा हूँ, धन्यवाद –

3

मैं इस तरह से

delete from table1 
using table1, table2 
where table1.cm_id = table2.um_id 
and table2.order_num >= 518 
and table2.order_num <= 520; 
संबंधित मुद्दे

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