2011-06-01 15 views
5

2 तालिकाओं (MySQL)MySQL बैच अद्यतन

  1. data_details
  2. accounts_invoices

है आदर्श रूप में हर data_details एक accounts_invoices आईडी होनी चाहिए। वहाँ data_details रिकॉर्ड जहां accounts_invoice_id accounts_invoices तालिका

तो मैं एक ज्ञात accounts_invoice आईडी के साथ उन लोगों data_details रिकॉर्ड को अपडेट करने की कोशिश की में मौजूद नहीं है कर रहे हैं

किसी कारण से (data_details एक विदेशी accounts_invoices के प्राथमिक कुंजी से है)। यह है कि क्या मैं

update data_details 
set account_invoice_id = 1 
where account_invoice_id in (
    select d.id 
    from data_details d left join accounts_invoices a 
    on d.account_invoice_id = a.id 
    where a.id is null  
) 

किया है लेकिन एक त्रुटि

कह होता

आप FROM खंड (त्रुटि 1093)

कोई मेरी मदद कर सकते हैं, अग्रिम धन्यवाद में लक्ष्य तालिका अद्यतन के लिए 'data_details' निर्दिष्ट कर सकते हैं

चियर्स

समीरा

+1

भविष्य में इस समस्या से बचने के लिए, मैं इनो डीबी और विदेशी कुंजी बाधाओं का उपयोग करने की सलाह देता हूं। – Znarkus

+0

हाय @Znarkus, टिप्पणी के लिए धन्यवाद, मूल रूप से मैं भी इस मौजूदा तालिका के लिए एक विदेशी कुंजी संबंध जोड़ने के लिए कोशिश कर रहा हूँ: डी (data_details) – sameera207

+0

परीक्षण नहीं किया लेकिन mysql परमिट thos क्वेरी: अद्यतन data_details सेट d1 account_invoice_id = 1 से data_details d1 अंदरूनी पर d1.account_invoice_id = d1.id वाम data_details d2 शामिल हों शामिल हों d2.account_invoice_id = a.id पर एक accounts_invoices कहां a.id अशक्त –

उत्तर

4

अब यह एक जंगली अनुमान हो सकता है, लेकिन मुझे लगता है कि समस्या यह है कि आप उसी तालिका को अपडेट करते हैं जिसे आप पूछ रहे हैं। मुझे लगता है कि काम के आसपास इस तरह अस्थायी तालिका का उपयोग करने के, यह है:

update data_details 
set account_invoice_id = 1 
where account_invoice_id in (
select * from (
    select d.id 
    from data_details d left join accounts_invoices a 
    on d.account_invoice_id = a.id 
    where a.id is null  
) as t 
) 

हालांकि यह आज़माया नहीं है, तो सब गलत हो सकता है।


एसक्यूएल Updated मेरी त्रुटि है कि टिप्पणी में देखा गया था ठीक करने के लिए।

update data_details 
set account_invoice_id = 1 
where id in (
select * from (
    select d.id 
    from data_details d left join accounts_invoices a 
    on d.account_invoice_id = a.id 
    where a.id is null  
) as t 
) 
+0

हाय @ जेनर्कस, यह एक त्रुटि के साथ काम करता है, लेकिन कुछ भी अद्यतन नहीं कर रहा है .. कोई विचार? मदद चीयर्स के लिए धन्यवाद – sameera207

+0

'चयन' कथन निकालने का प्रयास करें और देखें कि वे – Znarkus

+0

पर वापस लौटते हैं हाय चयन कथन सही आईडी को आईडी के रूप में लौटाता है .. तो चयन सही है .... इसलिए यह केवल रिकॉर्ड अपडेट नहीं कर रहा है .. किसी भी मदद की सराहना की जाएगी, धन्यवाद – sameera207

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