2013-03-20 5 views
12

का उपयोग करके हटाना मैं किसी तालिका से हटाना चाहता हूं जो किसी अन्य तालिका पर मौजूद डेटा के आधार पर हटाना चाहता है, हालांकि, मेरे पास कोड है जो काम करता है और जब मैं इसे एक चयन स्टेमेंट के रूप में चलाता हूं तो मूल्य को हटाया जाता है हालांकि, जब मैं इसे हटाने के लिए बदलता हूं तो यह मुझे त्रुटियां देता है, कि मुझे समझ में नहीं आता कि वे वहां क्यों हैं।LEFT JOIN

DELETE leadCustomer.* FROM coursework.leadCustomer LEFT JOIN coursework.flightBooking 
ON leadCustomer.customerID = flightBooking.customerID 
WHERE leadCustomer.customerID NOT IN (
SELECT customerID FROM (SELECT customerID, status FROM coursework.flightBooking) AS 
StatusCount where status IN ('R','H') GROUP BY customerID 
) 
AND leadCustomer.customerID = 8; 

त्रुटि:

ERROR: syntax error at or near "leadCustomer" 
LINE 1: DELETE leadCustomer.* FROM coursework.leadCustomer LEFT JOIN... 
      ^

********** Error ********** 

ERROR: syntax error at or near "leadCustomer" 
SQL state: 42601 
Character: 8 

मैं उपयोग कर रहा हूँ postgres

+2

उपयोग 'टेबल से हटाना जहां (अपने चयन क्वेरी) में आईडी' – jonasnas

+1

निकालें। * और से हटाएँ loadCustomer पर डाल दिया .. .. – Rodolfo

+0

इसे आज़माएं: "लीड ग्राहक से हटाएं ..." – Arvo

उत्तर

9

जहां मैं इसे देखना से, आप वास्तव में जरूरत नहीं है इसे करने के लिए शामिल हों ...

DELETE FROM coursework.leadCustomer 
WHERE leadCustomer.customerID NOT IN (
SELECT distinct customerID FROM coursework.flightBooking where status IN ('R','H') 
) 
AND leadCustomer.customerID = 8; 

यह एक ग्राहक आईडी वह यह है कि साथ leadcustomer में सभी रिकॉर्ड को नष्ट करेगा: 1) 8 2 से भिन्न हो) नहीं मेज की स्थिति के साथ flightbooking में 'आर' या 'एच'

क्या नहीं है कि आप करने की कोशिश कर रहे हैं?

+0

आप सही थे, मुझे शामिल होने की आवश्यकता नहीं थी। और उस मध्य पंक्ति की नीरसता भी काम करती है, हालांकि यह एक आईडी दिया जाता है, यह उस पंक्ति को हटा देता है यदि उसके पास स्थिति आर या एच – Matt

+0

के साथ कोई संबंधित बुकिंग नहीं है, हालांकि यह काम नहीं करता है, ग्राहक आईडी के सूचकांक का उपयोग नहीं करेगा (यदि आपके पास कोई है) जो दर्द हो सकता है (इस में http://stackoverflow.com/questions/652770/delete-with-join-in-mysql) – zzarbi

-3

leadCustomer.* से .* निकालें अर्थात्:

DELETE leadCustomer FROM coursework.leadCustomer LEFT JOIN coursework.flightBooking 
ON leadCustomer.customerID = flightBooking.customerID 
WHERE leadCustomer.customerID NOT IN (
SELECT customerID FROM (SELECT customerID, status FROM coursework.flightBooking) AS 
StatusCount where status IN ('R','H') GROUP BY customerID 
) 
AND leadCustomer.customerID = 8; 
+1

PostgreSQL एक 'बाएं जॉइन' का समर्थन नहीं करता है जो 'DELETE' को संदर्भित करता है। – Skrol29

-3

आप इस

DELETE leadCustomer FROM coursework.leadCustomer lc 
LEFT JOIN coursework.flightBooking fb ON lc.customerID = fb.customerID 
and status IN ('R','H')and fb.customer_id is not null 
WHERE leadCustomer.customerID = 8; 
+0

पर टिप्पणियां देखें, मुझे लगता है कि [दस्तावेज़ीकरण] (http : //www.postgresql.org/docs/9.3/static/sql-delete.html), कि यहां 'बाएं जॉइन' एक वाक्यविन्यास त्रुटि का कारण बन जाएगा। –

+1

PostgreSQL एक 'बाएं जॉइन' का समर्थन नहीं करता है जो 'DELETE' को संदर्भित करता है। – Skrol29

0

आप ऐसा करने की आवश्यकता होगी कोशिश कर सकते हैं:

TableA से हटाएँ जहां में आईडी (TableA से आईडी का चयन एक बाईं बाहरी a.ID पर tableB ख में शामिल होने के = बी.आईडी जहां बी.आईडी न्यूल है)

34

सैंपल। तालिका में अभिलेख को नष्ट 'ए' वहाँ में तालिका रिकॉर्ड नहीं होतीं "एच"

DELETE A FROM ARTICULO_ALMACEN A 
LEFT JOIN HISTORICO_UNION H 
ON A.COD_ARTICULO = H.COD_ARTICULO 
AND A.COD_ALMACEN = H.COD_ARTICULO_ALMACEN 
AND A.TPROPIEDAD1 = H.PROPIEDAD1 
AND A.TPROPIEDAD2 = H.PROPIEDAD2 
AND A.TPROPIEDAD3 = H.PROPIEDAD3 
WHERE H.COD_ARTICULO IS NULL 
+3

यह काम करता है, और यह – Omu

+3

शीर्षक के लिए सही उत्तर है यह पोस्टग्रेज़ – Trev

+0

में काम नहीं करता है प्रश्न पोस्टग्रेस्क्ल टैग किया गया है लेकिन बाएं जॉइन पोस्टग्रेस्क्ल में DELETE के साथ मान्य नहीं है। – user9645

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