মাইএসকিউএল বাম জোনের সাথে সারিগুলি মোছা হচ্ছে


185

আমার কাছে দুটি টেবিল রয়েছে, একটি কাজের সময়সীমা জন্য, একটি চাকরির বর্ণনা দেওয়ার জন্য। প্রতিটি কাজ একটি স্থিতি নিতে পারে এবং কিছু স্ট্যাটাসের অর্থ কাজের সীমাবদ্ধতা অবশ্যই অন্য সারণি থেকে মুছতে হবে।

আমি সহজেই SELECTযে চাকরি / সময়সীমাগুলি আমার মানদণ্ডের সাথে পূরণ করে এটির সাথে LEFT JOIN:

SELECT * FROM `deadline`
LEFT JOIN `job` ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'

( statusজন্যে jobটেবিল না deadline)

তবে যখন আমি এই সারিগুলি মুছতে চাইব তখন deadlineমাইএসকিউএল একটি ত্রুটি ছুড়ে দেয়। আমার জিজ্ঞাসাটি হ'ল:

DELETE FROM `deadline`
LEFT JOIN `job`
ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'

মাইএসকিউএল ত্রুটি কিছুই বলে না:

আপনার এসকিউএল সিনট্যাক্সে আপনার একটি ত্রুটি রয়েছে; ' jobমাইক্রোসফট_জবইড_জব.জব.আইডি_আইডি WHERE status=' szaml 'লাইন 1 এ ' বাম যোগ দিন 'এর নিকটবর্তী ডান সিনট্যাক্সের জন্য আপনার মাইএসকিউএল সার্ভার সংস্করণের সাথে সামঞ্জস্যপূর্ণ ম্যানুয়ালটি পরীক্ষা করুন

আমি কীভাবে আমার SELECTএকটি কার্য DELETEপ্রশ্নে রূপান্তর করতে পারি ?

উত্তর:


334

কোনটি সারণিতে প্রয়োগ করতে হবে তা কেবল আপনাকে নির্দিষ্ট করতে হবে DELETE

কেবল deadlineসারিগুলি মুছুন :

DELETE `deadline` FROM `deadline` LEFT JOIN `job` ....

deadlineএবং jobসারিগুলি মুছুন :

DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....

কেবল jobসারিগুলি মুছুন :

DELETE `job` FROM `deadline` LEFT JOIN `job` ....

4
"এএস" দিয়ে আমার উপন্যাসটি আমার উদ্দেশ্যটির জন্য কাজ করার জন্য আমাকে এটিকে ব্যবহার করতে হয়েছিল (এতিমগুলি মুছুন): t1.uid = t2.result যেখানে t2.result হয় তা কেবলমাত্র T1 থেকে টেবিল 1 থেকে t1 বামে যোগদান করুন
উরস

মজার বিষয় হল, আমার পিএইচপিএমআইএডমিন 4.5.1 সিন্ট্যাক্স পরীক্ষক DELETEএবং এর মধ্যে কিছু গ্রহণ করবে না FROM, তবে কোয়েটি ঠিক আছে, যখন আমি গো টিপলাম।
মাটির রায়

38

আপনি যদি "টেবিল হিসাবে" ব্যবহার করেন তবে মুছতে এটি নির্দিষ্ট করুন।

উদাহরণে আমি সমস্ত টেবিল_1 সারিগুলি মুছুন যা টেবিল_2 এ বিদ্যমান নেই।

DELETE t1 FROM `table_1` t1 LEFT JOIN `table_2` t2 ON t1.`id` = t2.`id` WHERE t2.`id` IS NULL

4
DELETE FROM deadline where ID IN (
    SELECT d.ID FROM `deadline` d LEFT JOIN `job` ON deadline.job_id = job.job_id WHERE `status` =  'szamlazva' OR `status` = 'szamlazhato' OR `status` = 'fizetve' OR `status` = 'szallitva' OR `status` = 'storno');

আমি নিশ্চিত না যে এই ধরণের সাব কোয়েরি মাইএসকিউএলে কাজ করে তবে চেষ্টা করে দেখুন। আমি ধরে নিচ্ছি যে আপনার সময়সীমাতে আপনার একটি আইডি কলাম রয়েছে।


1
ওপিতে এখনও DELETEক্যোরিটিকে দ্ব্যর্থহীন করতে হবে তা নির্দিষ্ট করতে হবে। Inসাবকিউরিয়াস ব্যবহার করা সবকিছুকে অনেক ধীর করে তোলে। এটি সেরা এড়ানো।
ইয়ান আটকিন

কোনো সারণি মধ্যে উল্লিখিত DELETEএবং FROM
ইসতিয়াক আহমেদ

1

এটা চেষ্টা কর:

DELETE `deadline`
FROM `deadline`
INNER JOIN `job` ON `deadline`.`job_id` = `job`.`id`
WHERE `job`.`id` = 123

1

মাইএসকিউএল আপনাকে একটি সারণী থেকে সারিগুলি এবং অন্য সারণির সাথে সাদৃশ্য সারিগুলি মুছতে মুছে ফেলতে বিবৃতিতে অন্তর্ভুক্ত যোগদানের ধারাটি ব্যবহার করতে দেয়।

উদাহরণস্বরূপ, একটি নির্দিষ্ট শর্ত পূরণ করে উভয়ই T1 এবং T2 টেবিল থেকে সারিগুলি মুছতে, আপনি নিম্নলিখিত বিবৃতিটি ব্যবহার করুন:

DELETE T1, T2
FROM T1
INNER JOIN T2 ON T1.key = T2.key
WHERE condition;

লক্ষ্য করুন যে আপনি মুছে ফেলুন এবং FROM কীওয়ার্ডগুলির মধ্যে সারণির নাম T1 এবং T2 রেখেছেন। আপনি যদি টি 1 টেবিলটি বাদ দেন, মোছা বিবৃতিটি কেবল টি 2 টেবিলের সারিগুলি মুছবে। একইভাবে, আপনি যদি 2 টেবিলটি বাদ দেন, তবে মুছে ফেলা বিবৃতি টি 1 টেবিলের কেবল সারিগুলি মুছে ফেলবে।

এই সাহায্য আশা করি।

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