SQLite पर तालिकाओं में शामिल होने के दौरान मैं एक अद्यतन कैसे करूँ?


92

मैंने कोशिश की :

UPDATE closure JOIN item ON ( item_id = id ) 
SET checked = 0 
WHERE ancestor_id = 1

तथा:

UPDATE closure, item 
SET checked = 0 
WHERE ancestor_id = 1 AND item_id = id

दोनों MySQL के साथ काम करते हैं, लेकिन वे मुझे SQLite में एक सिंटैक्स त्रुटि देते हैं।

मैं SQLite संस्करण 3.5.9 के साथ यह अद्यतन / संयुक्त कैसे बना सकता हूं?


इसका जवाब पहले से ही stackoverflow.com/questions/3845718/…
Ivelin Nikolaev

जवाबों:


128

आप नहीं कर सकते। SQLite अपडेट स्टेटमेंट में जॉइन का समर्थन नहीं करता है

लेकिन, आप शायद इसके बजाय एक मातहत के साथ ऐसा कर सकते हैं:

UPDATE closure SET checked = 0 
WHERE item_id IN (SELECT id FROM item WHERE ancestor_id = 1);

या कुछ इस तरह का; यह स्पष्ट नहीं है कि आपका स्कीमा क्या है।


20
जहां यह बालों का हो जाता है, जब आपको क्या करने की आवश्यकता होती है, तो एक एसोसिएशन की दिशा को उलटने के लिए एक टेबल से दूसरे टेबल पर कॉपी करें। जहाँ MySQL में आप कुछ ऐसा कर सकते हैं, तो foos.bar_id कॉलम बनाएं, फिर update foos join bars on bars.foo_id = foos.id set foos.bar_id = bars.id, सलाखों को छोड़ दें। Foo_id कॉलम ... यह SQLite में कैसे किया जा सकता है? अगर किसी को पता है, मुझे यकीन है कि इसका इस्तेमाल कर सकते हैं।
hoff2

@ hoff2 वास्तव में, यह शायद ऐसा करने का सबसे सरल तरीका है। मेरे मामले में मैं भी कहां मौजूद है भाग की जरूरत नहीं थी: stackoverflow.com/a/3845931/847201
ACK_stoverflow

6

आप REPLACE का उपयोग भी कर सकते हैं, फिर आप जॉइन के साथ चयन का उपयोग कर सकते हैं। ऐशे ही:

REPLACE INTO clusure 
 SELECT sel.col1,sel.col2,....,sel.checked --checked should correspond to column that you want to change
FROM (
 SELECT *,0 as checked FROM closure LEFT JOIN item ON (item_id = id) 
 WHERE ancestor_id = 1) sel
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.