تبديل صف في أعمدة مع MySQL دون استخدام النقابات؟

StackOverflow https://stackoverflow.com/questions/1851781

  •  13-09-2019
  •  | 
  •  

سؤال

لدي جدول مشابه لما يلي أدناه:

       id |        cat |         one_above |        top_level | 
        0    'printers'          'hardware'        'computers'

أريد أن أكون قادرا على كتابة استفسار، دون استخدام النقابات, ، سيعودني إلى مجموعة النتائج التي تنقل أعمدة هذا الجدول إلى صفوف. ماذا يعني هذا، هو أنني أريد أن تكون النتيجة:

       id |          cat |
        0      'printers'
        0      'hardware'
        0     'computers'

هل هذا ممكن في mysql؟ لا أستطيع الدخول إلى طبقة التطبيق وأداء هذا لأنني أطعم هذه في محرك بحث سوف فهرس استنادا إلى المعرف. مختلف DBMS الأخرى لديها شيء مثل pivot و unpivot. سأكون ممتنا لأي نظرة ثاقبة لشيء أفتقده.

محمود

ملاحظة

أنا أفكر في إعادة تطبيع قاعدة البيانات كخيار أخير، لأن هذا لن يكون مهمة تافهة.

شكرا!

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

المحلول

حصلت على هذا من الكتاب فن SQL, الصفحات 284-286:

دعنا نقول اسم الجدول الخاص بك هو foo.

أولا، قم بإنشاء جدول يسمى pivot:

CREATE Table pivot (
  count int
);

إدراج في تلك الجداول حيث توجد العديد من الصفوف كأعمدة تريد محورها foo. وبعد لأن لديك ثلاثة أعمدة في foo أنك تريد المحور، وخلق ثلاثة صفوف في جدول المحور:

insert into pivot values (1);
insert into pivot values (2);
insert into pivot values (3);

الآن القيام بالانضمام الديكارتيون بين foo و pivot, باستخدام أ CASE لتحديد العمود الصحيح بناء على العدد:

SELECT foo.id, Case pivot.count
  When 1 Then cat
  When 2 Then one_above
  When 3 Then top_level
End Case
FROM foo JOIN pivot;

هذا يجب أن يمنحك ما تريد.

نصائح أخرى

بعد بعض حفر واسعة إلى حد ما تعثرت هذه الصفحة التي قد تحتوي أو لا تحتوي على إجابتك. من الصعب في MySQL ولكن من وجهة نظر مفاهيمية، يمكنني إنشاء استعلام من شأنه أن يتبنى مثل هذا باستخدام وصف (على الرغم من أنه من المحتمل أن يؤدي ذلك بشكل فظيع). لذلك أنا متأكد من أنه يمكننا معرفة طريقة للقيام بذلك بالطريقة الصحيحة.

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