এসকিউএল অন্তর্ভুক্ত যোগ দিন


120

এখানে আছে 2 টেবিল হয়, spawnlistএবং npc, এবং আমি থেকে ডেটা মোছার প্রয়োজন spawnlsitnpc_templateid = n.idTemplateটেবিলগুলিকে "সংযুক্ত" করার একমাত্র জিনিস। আমি এই স্ক্রিপ্ট চেষ্টা করেছি কিন্তু কাজ করে না।

আমি এটি চেষ্টা করেছি:

DELETE s FROM spawnlist s
INNER JOIN npc n ON s.npc_templateid = n.idTemplate
WHERE (n.type = "monster");

1
আরও বিস্মিত হয়েছিল কারণ সাধারণত এল 2 সম্প্রদায়টি নিজের মধ্যে থাকে। প্রশ্নটি পড়ার পরে "কিছুটা অদ্ভুত ছিল" দেখে মনে হচ্ছে "হুম ... এটি!" :)
কর্বিন

1
@ কর্বিন আমি সম্পূর্ণরূপে দেখতে চাই আপনি কী বোঝাতে চাইছেন। যথেষ্ট আকর্ষণীয়, আমি একটি কাজের প্রকল্পের কাছে এল 2 প্রশ্নের সাহায্য পাচ্ছি।
মার্কো অরেলিও ডেলিউ

T1.id = t2.id তে টেবিল 1 টি 1 অন্তঃস্থ জোড় টেবিল 2 টি 2 থেকে টেবিল 1 থেকে মুছুন; বিশদ youtu.be/_tyUVrS2iH4
অমরেশ কুমার সিং

উত্তর:


224

যোগ .*করার জন্য sআপনার প্রথম লাইনে।

চেষ্টা করুন:

DELETE s.* FROM spawnlist s
INNER JOIN npc n ON s.npc_templateid = n.idTemplate
WHERE (n.type = "monster");

আমি পেয়েছি ত্রুটিটি এখানে: [এরর] 1064 - আপনার এসকিউএল সিন্টেক্সে আপনার একটি ত্রুটি রয়েছে; ডান সিনট্যাক্সের জন্য আপনার মাইএসকিউএল সার্ভার সংস্করণের সাথে সম্পর্কিত ম্যানুয়ালটি পরীক্ষা করে দেখুন 'স্পোনলিস্ট FROM db.root.spawnlist এর INNER JNIN db.root.npc n on s.npc_t' লাইন 1 [Err] মোছার জন্য l2revo.root। স্পেনলিস্ট থেকে FbM db.root.spawnlist s INNER JOIN db.root.npc n ON s.npc_templateid = n.idTemplate WHERE (n.type = "দৈত্য"); [এমএসজি] সমাপ্ত - অসফল -------------------------------------------- ------
JoinOG

আপনার ত্রুটিতে দেখে মনে হচ্ছে আপনি এর জন্য দুটি পৃথক সার্ভারের নাম ব্যবহার করছেন spawnlist। আমি দেখছি l2revo.root.spawnlistএবং db.root.spawnlist
থিংকিংস্টিফ

আমি এখানে এটি আটকানোর জন্য একটি ভুল করেছি তবে ব্যবহারকারীর নাম এবং ডিবি নামটি আমার ত্রুটিতে রয়েছে।
JoinOG

ASআপনার ডাকনাম যুক্ত করার চেষ্টা করুন ।
থিংকিংস্টিফ

4
@ গৌরবামানন এস। * মাইএসকিএলকে কী মুছে ফেলতে হবে তা বলছেন, আপনি যুক্ত সারণী থেকে সারিগুলি মুছতে চান না
জুলজ

12

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

এই উদাহরণের জন্য তবে আমি মনে করি না যে আপনার প্রথমটি দরকার:

DELETE s 
FROM spawnlist AS s 
INNER JOIN npc AS n ON s.npc_templateid = n.idTemplate 
WHERE n.type = "monster";

মুছে ফেলার আগে সারিগুলি নির্বাচন করা আরও ভাল ধারণা হতে পারে যাতে আপনি যা চান তা মুছে ফেলার বিষয়ে নিশ্চিত হন:

SELECT * FROM spawnlist
INNER JOIN npc ON spawnlist.npc_templateid = npc.idTemplate
WHERE npc.type = "monster";

আপনি এখানে মাইএসকিউএল মোছার সিনট্যাক্সটিও দেখতে পারেন: http://dev.mysql.com/doc/refman/5.0/en/delete.html


এটি আমি পেয়েছি ত্রুটি: [এরর] 1064 - আপনার এসকিউএল সিন্টেক্সে আপনার একটি ত্রুটি রয়েছে; ডান সিনট্যাক্সের জন্য আপনার মাইএসকিউএল সার্ভার সংস্করণের সাথে সম্পর্কিত ম্যানুয়ালটি পরীক্ষা করুন নিকটস্থ ইন.এন.সি.সি.সি.পি.এলপ্লেটিড = এন.আইডি টেম্পলেট যেখানে এন.টি.পি. = "দানব" লাইন 1 এ [ত্রুটি] স্পেনলিস্টের ভিতরে থেকে মুছে ফেলুন যোগদান করুন এনপিসি এন ও এস.এনপিসি_টেম্প্লেটিড = এন.আইডি টেম্পলেট WHERE n.type = "দৈত্য"; [এমএসজি] সমাপ্ত - অসফল ------------------------ --------------------------
G

পরিবর্তিত হয়েছে, এখন আরও সফল হতে পারে?
ড্যান

ত্রুটি: [ত্রুটি] 1066 - অনন্য টেবিল / ওরফে নয়: 'এনপিসি' [ত্রুটি] স্পেনলিস্ট থেকে স্পেনলিস্ট মুছে ফেলুন, এনপিসি ইনার জিন এনপিসি যেখানে স্পেনলিস্ট.এনপিসি_টেম্প্লেটিড = npc.idTemplate এবং npc.type = "দানব"; [এমএসজি] সমাপ্ত - অসফল -------------------------------------------- ------
JoinOG

আপনি যদি কেবল একবার এটি চালাতে যাচ্ছেন তবে আপনি মারাত্মকভাবে অদক্ষ চালাতে পারবেন: স্পেনলিস্ট থেকে এনপিসি_টেম্প্লেটিড ইন ডিলিট করুন (এনপিসি WHERE টাইপ = "দানব" থেকে idTemplate নির্বাচন করুন);
কর্বিন

এটি আমার শেষ প্রয়াস, যদি আপনার যোগদানের মাত্র একটি টেবিল থেকে মুছে ফেলা হয় তবে কেন এটি কাজ করবে না তা আমি দেখতে পাচ্ছি না।
ড্যান

6

ডাটাবেস যদি InnoDB হয় তবে আপনাকে মুছে ফেলার ক্ষেত্রে যোগ দিতে হবে না। কেবল

DELETE FROM spawnlist WHERE spawnlist.type = "monster";

অন্যান্য টেবিলে বিদেশী কীগুলির সাথে লিঙ্কযুক্ত সমস্ত রেকর্ড মুছতে ব্যবহার করতে পারেন, এটি করার জন্য আপনাকে প্রথমে নকশাকালীন সময়ে আপনার টেবিলগুলি সংযুক্ত করতে হবে।

CREATE TABLE IF NOT EXIST spawnlist (
  npc_templateid VARCHAR(20) NOT NULL PRIMARY KEY

)ENGINE=InnoDB;

CREATE TABLE IF NOT EXIST npc (
  idTemplate VARCHAR(20) NOT NULL,

  FOREIGN KEY (idTemplate) REFERENCES spawnlist(npc_templateid) ON DELETE CASCADE

)ENGINE=InnoDB;

যদি আপনি মাইআইএসএএম ব্যবহার করেন তবে আপনি এইভাবে যোগদানের রেকর্ডগুলি মুছতে পারেন

DELETE a,b
FROM `spawnlist` a
JOIN `npc` b
ON a.`npc_templateid` = b.`idTemplate`
WHERE a.`type` = 'monster';

প্রথম লাইনে আমি ডিলেট রেকর্ডের জন্য দুটি টেম্প টেবিল শুরু করেছি, দ্বিতীয় লাইনে আমি এক্সটেনশন টেবিলটি এ এবং বি উভয়কে অর্পণ করেছি তবে এখানে আমি উভয় টেবিলকে মূল শব্দটির সাথে যুক্ত করেছি, এবং আমি প্রাথমিক এবং বিদেশী কীটির সাথে মিল রেখেছি উভয় টেবিলের জন্য যা লিঙ্ক তৈরি করে, শেষ লাইনে আমি মুছে ফেলার জন্য ফিল্ডে রেকর্ড ফিল্টার করেছি।


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