মাইএসকিউএলে আপনি সিনট্যাক্সটি ব্যবহার করতে পারেন
DELETE t1,t2
FROM table1 AS t1
INNER JOIN table2 t2 ...
INNER JOIN table3 t3 ...
আমি কীভাবে এসকিউএল সার্ভারে একই জিনিস করব?
মাইএসকিউএলে আপনি সিনট্যাক্সটি ব্যবহার করতে পারেন
DELETE t1,t2
FROM table1 AS t1
INNER JOIN table2 t2 ...
INNER JOIN table3 t3 ...
আমি কীভাবে এসকিউএল সার্ভারে একই জিনিস করব?
উত্তর:
আপনি এই উদাহরণে "মুছে ফেলা" সিউডো টেবিলটির সুবিধা নিতে পারেন। কিছুটা এইরকম:
begin transaction;
declare @deletedIds table ( id int );
delete from t1
output deleted.id into @deletedIds
from table1 as t1
inner join table2 as t2
on t2.id = t1.id
inner join table3 as t3
on t3.id = t2.id;
delete from t2
from table2 as t2
inner join @deletedIds as d
on d.id = t2.id;
delete from t3
from table3 as t3 ...
commit transaction;
অবশ্যই আপনি একটি 'আউটপুট মোছা' করতে পারেন। তৃতীয় টেবিলে যোগ দিতে যদি আপনার কিছু প্রয়োজন হয় তবে দ্বিতীয়টিও মুছুন।
পার্শ্ব নোট হিসাবে, আপনি sertedোকানোও করতে পারেন * * একটি sertোকানো বিবৃতিতে, এবং উভয় sertedোকানো। * এবং মুছে ফেলা হয়েছে * * একটি আপডেট বিবৃতিতে।
সম্পাদনা: এছাড়াও, আপনি টেবিল 2 + 3 থেকে মুছতে টেবিল 1 এ একটি ট্রিগার যোগ করার বিষয়টি বিবেচনা করেছেন? আপনি একটি অন্তর্নিহিত লেনদেনের ভিতরে থাকবেন এবং এতে "সন্নিবেশিত " এবং "মোছা " থাকবে সিউডো-টেবিলগুলিও।
আপনি সর্বদা টেবিলগুলির সম্পর্কের উপরে ক্যাসকেডিং মুছতে সেট আপ করতে পারেন।
আপনি একটি সঞ্চিত পদ্ধতিতে একাধিক মুছতে সক্ষম করতে পারেন।
কাজের এক ইউনিট নিশ্চিত করতে আপনি লেনদেন ব্যবহার করতে পারেন।
আপনি এসকিউএল সার্ভারে ডিলিট এফআরএম ক্লজে জিন সিনট্যাক্স ব্যবহার করতে পারেন তবে আপনি এখনও প্রথম টেবিল থেকে মুছবেন এবং এটি মালিকানার লেনদেন-এসকিউএল এক্সটেনশন যা সাব-কোয়েরির বিকল্প is
উদাহরণ থেকে এখানে :
-- Transact-SQL extension
DELETE
FROM Sales.SalesPersonQuotaHistory
FROM Sales.SalesPersonQuotaHistory AS spqh INNER JOIN
Sales.SalesPerson AS sp ON spqh.BusinessEntityID = sp.BusinessEntityID
WHERE sp.SalesYTD > 2500000.00;
মাস্টার টেবিল থেকে কিছু রেকর্ড মুছার উদাহরণ এবং দুটি বিশদ টেবিল থেকে সংশ্লিষ্ট রেকর্ডগুলি মুছার জন্য:
BEGIN TRAN
-- create temporary table for deleted IDs
CREATE TABLE #DeleteIds (
Id INT NOT NULL PRIMARY KEY
)
-- save IDs of master table records (you want to delete) to temporary table
INSERT INTO #DeleteIds(Id)
SELECT DISTINCT mt.MasterTableId
FROM MasterTable mt
INNER JOIN ...
WHERE ...
-- delete from first detail table using join syntax
DELETE d
FROM DetailTable_1 D
INNER JOIN #DeleteIds X
ON D.MasterTableId = X.Id
-- delete from second detail table using IN clause
DELETE FROM DetailTable_2
WHERE MasterTableId IN (
SELECT X.Id
FROM #DeleteIds X
)
-- and finally delete from master table
DELETE d
FROM MasterTable D
INNER JOIN #DeleteIds X
ON D.MasterTableId = X.Id
-- do not forget to drop the temp table
DROP TABLE #DeleteIds
COMMIT
SELECT INTO #DeleteIds
পরিবর্তে CREATE TABLE 'DeleteIds
দ্বারা অনুসরণ INSERT INTO 'DeleteIds...
?
শুধু ভাবছি .. মাইএসকিউএলে এটি কি সম্ভব? এটি টি 1 এবং টি 2 মুছে ফেলবে? অথবা আমি কেবল প্রশ্নটি ভুল বুঝেছি।
তবে আপনি যদি কেবল একাধিক যোগদানের শর্তাবলী সহ টেবিল 1 মুছতে চান তবে কেবল যে টেবিলটি মুছতে চান তার নাম রাখবেন না
এই:
DELETE t1,t2
FROM table1 AS t1
INNER JOIN table2 t2 ...
INNER JOIN table3 t3 ...
এমএসএসকিউএলে কাজ করার জন্য এই জাতীয় লেখা উচিত:
DELETE table1
FROM table1
INNER JOIN table2 t2 ...
INNER JOIN table3 t3 ...
অন্য দুটি সাধারণ আরডিবিএমএস কীভাবে মুছে ফেলা অপারেশন করে তা বিপরীতে:
http://mssql-to-postgresql.blogspot.com/2007/12/deleting-duplicates-in-postgresql-ms.html
মূলত, কোনও লেনদেনে আপনাকে প্রথমে বাচ্চাদের এবং তারপরে অভিভাবকদের তিনটি মুছে ফেলার বিবৃতি দিতে হবে না। ক্যাসকেডিং মুছে ফেলা সেট আপ করা ভাল ধারণা যদি এটি কোনও একজাতীয় জিনিস না হয় এবং এর অস্তিত্ব কোনও বিদ্যমান ট্রিগার সেটআপের সাথে বিরোধ করবে না।
এসকিউএল সার্ভারে জয়েন ব্যবহার করে একাধিক সারণী মোছার কোনও উপায় নেই। সুতরাং আপনাকে প্রথমে বাচ্চা থেকে মুছে ফর্ম প্যারেন্টটি মুছতে হবে।
এতিম না রেখে রেকর্ড মুছে ফেলার এটি বিকল্প উপায়।
@ ব্যবহারকারীর সারণী ঘোষণা করুন (কীভ্যালু ইন্ট, কিছু স্ট্রিং বার্চার (10)) @ ব্যবহারকারীর মধ্যে .োকান মান (1, '1 মান') @ ব্যবহারকারীর মধ্যে .োকান মান (2, '2 মান') @ ব্যবহারকারীর মধ্যে .োকান মান (3, '3 মান') @ পাসওয়ার্ড সারণী ঘোষণা করুন (কীভ্যালু ইন্ট, বিবরণী বারচার (10)) @ পাসওয়ার্ড .োকান মান (1, '1 পাসওয়ার্ড') @ পাসওয়ার্ড .োকান মান (2, '2 পাসওয়ার্ড') @ পাসওয়ার্ড .োকান মান (3, '3 পাসওয়ার্ড') - আগে মুছে ফেলা @ পাসওয়ার্ড থেকে * একটি অভ্যন্তরীণ যোগ যোগদান করুন @ ব্যবহারকারীর বি নির্বাচন করুন on a.keyvalue = b.keyvalue @ ব্যবহারকারীর থেকে # মুছে যাওয়া আইডিতে * নির্বাচন করুন যেখানে কীভ্যালু = 1 - এটি আউটপুট উদাহরণের মতো কাজ করে কীভ্যালু = 1 যেখানে @ ব্যবহারকারীর মুছুন @ পাসওয়ার্ড মুছে ফেলুন যেখানে কীভ্যালু রয়েছে (# ডেলিটেডিড থেকে মূলমূল নির্বাচন করুন) - মুছে ফেলার পরে - @ পাসওয়ার্ড থেকে * একটি অভ্যন্তরীণ যোগ যোগদান করুন @ ব্যবহারকারীর বি নির্বাচন করুন on a.keyvalue = b.keyvalue
সব উল্লেখ করা হয়েছে। শুধু পারেন ব্যবহার DELETE ON CASCADE
পিতা বা মাতা উপর table
বা থেকে মুছে child-table
যাওয়ার parent
।
অ্যারন যেমন ইতিমধ্যে ইঙ্গিত করেছে, আপনি মুছে ফেলা আচরণটি ক্যাসকেডে সেট করতে পারেন এবং এটি পিতামাতার রেকর্ড মুছে ফেলা হলে বাচ্চাদের রেকর্ড মুছে ফেলবে। আপনি যদি না চান কিছু অন্য যাদু ঘটতে পারে (যার ক্ষেত্রে হারুনের উত্তরটির পয়েন্ট 2, 3 দরকারী হবে), তবে কেন আমি আপনাকে অভ্যন্তরীণ যোগদানের সাথে মুছতে হবে তা দেখছি না।
জন গিবের উত্তরটির ভিত্তিতে, এফকে সম্পর্কের সাথে দুটি টেবিলের ডেটার সেট মুছে ফেলার জন্য:
--*** To delete from tblMain which JOINs to (has a FK of) tblReferredTo's PK
-- i.e. ON tblMain.Refer_FK = tblReferredTo.ID
--*** !!! If you're CERTAIN that no other rows anywhere also refer to the
-- specific rows in tblReferredTo !!!
BEGIN TRAN;
--*** Keep the ID's from tblReferredTo when we DELETE from tblMain
DECLARE @tblDeletedRefs TABLE ( ID INT );
--*** DELETE from the referring table first
DELETE FROM tblMain
OUTPUT DELETED.Refer_FK INTO @tblDeletedRefs -- doesn't matter that this isn't DISTINCT, the following DELETE still works.
WHERE ..... -- be careful if filtering, what if other rows
-- in tblMain (or elsewhere) also point to the tblReferredTo rows?
--*** Now we can remove the referred to rows, even though tblMain no longer refers to them.
DELETE tblReferredTo
FROM tblReferredTo INNER JOIN @tblDeletedRefs Removed
ON tblReferredTo.ID = Removed.ID;
COMMIT TRAN;
DELETE TABLE1 LIN
FROM TABLE1 LIN
INNER JOIN TABLE2 LCS ON CONDITION
WHERE CONDITION
$ SQL = "থেকে মুছে দিন basic_tbl
, education_tbl
,
personal_tbl
, address_tbl
, department_tbl
ব্যবহার
basic_tbl
, education_tbl
,
personal_tbl
, address_tbl
, department_tbl
কোথায়
b_id
= e_id
= p_id
= a_id
= d_id
= '" $ আইডি।। "'"; $ রুপি = mysqli_query ($ বিরূদ্ধে, $ SQL);