এসকিউএলাইটে টেবিলগুলিতে যোগদানের সময় কীভাবে আমি একটি আপডেট করব?


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

উভয়ই মাইএসকিউএল নিয়ে কাজ করে তবে সেগুলি এসকিউএলাইটে আমাকে একটি সিনট্যাক্স ত্রুটি দেয়।

আমি কীভাবে এই আপডেট / जॉিন এসকিউএলাইট সংস্করণ 3.5.9 এর সাথে কাজ করতে পারি?


উত্তর:


129

আপনি পারবেন না। SQLite আপডেটের বিবৃতিগুলিতে JOINs সমর্থন করে না

তবে, আপনি সম্ভবত এর পরিবর্তে একটি subquery দিয়ে এটি করতে পারেন:

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

বা এরকম কিছু; আপনার স্কিমাটি ঠিক কী তা পরিষ্কার নয়।


20
যখন এটি লোমশ হয়ে ওঠে তখন যখন আপনাকে যা করা দরকার তা হচ্ছে কোনও সংস্থার দিকনির্দেশকে উল্টানোর জন্য একটি কলামটি অন্য টেবিল থেকে অনুলিপি করা উচিত। মাইএসকিউএল-এ আপনি এখানে foos.bar_id কলাম তৈরি করার মতো কিছু করতে পারেন, তারপরে update foos join bars on bars.foo_id = foos.id set foos.bar_id = bars.idবারস.ফু_আইডি কলামটি ফেলে দিন ... এসকিউএলাইটে এটি কীভাবে করা যায়? যদি কেউ জানে, আমি অবশ্যই এটি ব্যবহার করতে পারি।
hoff2

@ হফ 2 আসলে এটি সম্ভবত এটি করার সবচেয়ে সহজ উপায়। আমার ক্ষেত্রে আমি এমনকি কোথায় বিদ্যমান অংশ প্রয়োজন নি: stackoverflow.com/a/3845931/847201
ACK_stoverflow

7

আপনি প্রতিস্থাপনও ব্যবহার করতে পারেন তারপরে আপনি যোগদানের সাথে নির্বাচন ব্যবহার করতে পারেন। এটার মত:

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.