تحويل الكثيرين إلى الكثيرين إلى واحد إلى واحد (MySQL)
-
28-09-2019 - |
سؤال
قمنا بتغيير مخطط قاعدة البيانات ونقلنا علاقة بين المستخدمين/الحسابات من 1-1 إلى العديد من الأشياء التي تستخدم Accounts_Users.
لذلك لدينا حسابات ، مستخدمين ، حسابات _users (user_id و account_id)
لا تزال بياناتنا 1-1 ، وقررنا العودة. لذلك أنا بحاجة إلى SQL للعودة:
للهجرة اعتدت:
INSERT INTO accounts_users (account_id,user_id) SELECT id AS account_id, user_id AS user_id FROM accounts
للعودة إلى الوراء ، لقد حاولت:
UPDATE
accounts
SET
user_id = ru.user_id
FROM
accounts r, accounts_users ru
ON
r.id = ru.account_id
Update accounts
Set r.user_id = ru.user_id
FROM accounts r, accounts_users ru
WHERE r.id = ru.account_id
SELECT accounts_users.user_id
INTO accounts
FROM accounts_users
INNER JOIN accounts
ON accounts.id = accounts_users.account_id
كل هذه تعطي خطأ SQL من نوع ما. أنا أظن أن SQL الخاص بي غامض ، وأنا بحاجة إلى نوع من الاختيار أولاً أو دقيقة أو شيء من هذا القبيل.
** لكي أكون واضحًا ، فأنا بالتأكيد لا يزال لدي علاقة 1-1 في البيانات ، لكن لا يمكنني اكتشاف SQL لإعادة البيانات من الجداول الموجودة إلى الجداول الأصلية. ما أبحث عنه هو بعض SQL العاملة التي ستأخذ البيانات من الحسابين وتضع user_id في جدول الحساب. شكرا يا جويل
المحلول
بامكانك ان تحاول...
UPDATE accounts
SET user_id = (SELECT user_id
FROM accounts_users
WHERE accounts_users.accounts_id = accounts.accounts_id);
سيكون ذلك مملاً إذا كان لديك الكثير من الأعمدة في accounts_users
التي يجب أن تعود accounts
, ، على الرغم من ذلك ، ولن يعمل إذا كان هناك أي مشاكل مع IDS (وبالتالي إجابتي السابقة). كم عدد الأعمدة الموجودة؟
نصائح أخرى
إذا كان التعيين الخاص بك 1-1 ، فما عليك سوى تحديد النتيجة الأولى (أنت تعرف أن هناك واحدة فقط)