Python တွင် ဒေတာဆိုင်ရာ ဆက်နွယ်မှုများ
ကျွန်ုပ်တို့ရှေ့တွင် ဖခင်များနှင့် သားများကို သိမ်းဆည်းရန် တာဝန်ရှိသည်ဆိုပါစို့။ ဖခင်တစ်ဦးစီတွင် သားတစ်ယောက်သာ ရှိနိုင်ပြီး၊ သားသည်လည်း ၎င်း၏ကိုယ်ပိုင်သားတစ်ယောက် ရှိနိုင်သည်။
ဒေတာများကို မည်သို့သိမ်းဆည်းမည်ကို စဉ်းစားရန် လိုအပ်သည်။ ပထမဆုံး စိတ်ကူးမှာ
ဇယားနှစ်ခု ပြုလုပ်ရန် ဖြစ်နိုင်သည် - ဖခင်များအတွက် parents
ဇယားနှင့် သားများအတွက် sons ဇယား။ ထို့နောက်
ဤဇယားများကို အကွက်တစ်ခုခုဖြင့် ချိတ်ဆက်ရန်-
son_id သို့မဟုတ် parent_id။
သို့သော်၊ ဤစိတ်ကူးသည် အလွန်ကောင်းမွန်သော စိတ်ကူးမဟုတ်ပါ - အဘယ်ကြောင့်ဆိုသော် လူတစ်ဦးတည်းသည် တစ်ချိန်တည်းမှာပင် ဖခင်လည်းဖြစ်နိုင်သလို သားလည်းဖြစ်နိုင်သည် - ထို့ကြောင့် ၎င်းကို ဇယားနှစ်ခုစလုံးတွင် သိမ်းဆည်းရန် လိုအပ်မည်၊ ထိုသို့ပြုလုပ်ခြင်းသည် မအီမသာဖြစ်စေပြီး နေရာပိုလိုအပ်စေကာ အမှားများ ဖြစ်ပွားစေရန် လွယ်ကူသည်။
ပိုမိုကောင်းမွန်သောရွေးချယ်မှုမှာ ဇယားကို
၎င်း၏ကိုယ်ပိုင်နှင့် ချိတ်ဆက်ရန်ဖြစ်သည်- users ဇယားတစ်ခု ပြုလုပ်ကြပါစို့။
၎င်းအတွင်း၌ သက်ဆိုင်ရာယူဆာအားလုံးကို သိမ်းဆည်းပြီး တစ်ဦးစီအတွက်
son_id အကွက်ပြုလုပ်မည်၊ ထိုအကွက်အတွင်း၌
ထိုဇယားမှပင် id သားကို သိမ်းဆည်းမည်-
| id | name | son_id |
|---|---|---|
| 1 | user1 | 2 |
| 2 | user2 | 3 |
| 3 | user3 | null |
မေးမြန်းချက်များ
ယခု ၎င်း၏သားနှင့်အတူ ယူဆာကို ထုတ်ယူပေးမည့် မေးမြန်းချက်တစ်ခုကို ရေးကြပါစို့။
အစပိုင်းတွင် ယူဆာများကို ထုတ်ယူကြည့်ရအောင်-
SELECT
*
FROM
users
ယခု ယူဆာများနှင့် ၎င်းတို့၏သားများကို ပေါင်းစည်းကြမည်။ ကျွန်ုပ်တို့သည် ဇယားကို ၎င်း၏ကိုယ်ပိုင်နှင့် ပေါင်းစည်းမည်ဖြစ်သောကြောင့် ၎င်း၏အမည်ပြောင်းလဲမှုကို လုပ်ဆောင်ရန် လိုအပ်သည်-
LEFT JOIN users as sons
ယခု ကျွန်ုပ်တို့သည် အခြေခံဇယားနှင့် အမည်ပြောင်းထားသောဇယားတို့၏ ဆက်သွယ်မှုကို သတ်မှတ်နိုင်သည်-
LEFT JOIN users as sons ON sons.id=users.son_id
ယခု အကွက်များကို သတ်မှတ်ကြမည်-
SELECT
users.name as user_name, sons.name as son_name
အားလုံးကို စုစည်းပြီး အောက်ပါ မေးမြန်းချက်ကို ရယူကြမည်-
SELECT
users.name as user_name, sons.name as son_name
FROM
users
LEFT JOIN users as sons ON sons.id=users.son_id
လက်တွေ့လေ့ကျင့်ခန်းများ
ကျွန်ုပ်တို့တွင် ကဏ္ဍများ ရှိသည်ဆိုပါစို့။ ကဏ္ဍတစ်ခုစီသည် မိဘကဏ္ဍတစ်ခုခုနှင့် သက်ဆိုင်နိုင်ပြီး၊ ထိုကဏ္ဍသည်လည်း ၎င်း၏ကိုယ်ပိုင်မိဘကဏ္ဍနှင့် သက်ဆိုင်နိုင်ပြီး ထိုသို့ဆက်လက်ဖြစ်ပွားနိုင်သည်။ သိုလှောင်မှုဖွဲ့စည်းပုံကို ရေးဆွဲပါ။
ကဏ္ဍတစ်ခုကို ၎င်း၏မိဘကဏ္ဍနှင့်အတူ ထုတ်ယူပေးမည့် မေးမြန်းချက်တစ်ခုကို ရေးပါ။
ကဏ္ဍတစ်ခုကို ၎င်း၏မိဘနှင့် ဘိုးဘေးတို့နှင့်အတူ ထုတ်ယူပေးမည့် မေးမြန်းချက်တစ်ခုကို ရေးပါ။
ကဏ္ဍတစ်ခုကို ၎င်း၏မိဘ၊ ဘိုးဘေးနှင့် ဘိုးဘေးတို့၏ဘိုးဘေးတို့နှင့်အတူ ထုတ်ယူပေးမည့် မေးမြန်းချက်တစ်ခုကို ရေးပါ။