سؤال

أقوم بتعديل جدول PHPBB ليكون له علاقات ثنائية الاتجاه للأصدقاء. بشكل غير مريح ، أنشأ الأشخاص الذين أضافوا بالفعل أصدقاء صفوف مكررة:

user1   user2   friend
2       3       true
3       2       true
2       4       true

لذلك أرغب في إزالة الصفوف 1 و 2 من المثال أعلاه. حاليا ، هذا هو استعلامي المبني (لا يعمل أجهزة الصراف الآلي):

DELETE FROM friends WHERE user1 IN (SELECT user1 FROM (SELECT f1.user1 FROM friends f1, friends f2 WHERE f1.user1=f2.user2 AND f1.user2=f2.user1 GROUP BY f1.user1) AS vtable);

مستوحاة من صفوف MySQL المكررة (المكتشفة المكتشفة باستخدام عمودين), ، لكن الفرق هو أنه ليس لدي عمود معرف فريد وأود أن أبتعد عن وجود عمود إضافي.

هل كانت مفيدة؟

المحلول

الاعتذار إذا لم يكن هذا قانونيًا بنسبة 100 ٪ MySQL ، فأنا مستخدم MSSQL ...

DELETE F1
FROM friends F1
INNER JOIN friends F2
ON F2.user1 = F1.user2
AND F2.user2 = F1.user1
WHERE F1.user1 < F1.user2

نصائح أخرى

DELETE r
FROM friends l, friends r
WHERE l.user1 = r.user2
AND l.user2 = r.user1

هذا يحذف كلا الإدخالات. إذا كنت ترغب في الاستمرار فيهم ، فيجب عليك إضافة بيان مثل Will A alread المقترح ، لكنني أقترح عليك استخدام> بدلاً من <للحفاظ على معرف المستخدم الأصغر. فقط تبدو أفضل :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top