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
දැන් අපි භාවිතාකරුවන්ට ඔවුන්ගේ පුතුන් join කරමු. අපි වගුව තමන් සමඟම join කරන නිසා, අපි එය නැවත නම් කිරීම සිදු කළ යුතුය:
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
ප්රායෝගික කාර්යයන්
අපට වර්ග කිහිපයක් ඇතැයි සිතන්න. සෑම වර්ගයක්ම මව් වර්ගයකට අයත් විය හැකිය, එය අනුක්රමයෙන් තම මව් වර්ගයට අයත් වන අතර එය එසේම ඉදිරියට යයි. ගබඩා කිරීමේ ව්යුහය විස්තර කරන්න.
වර්ගයක් එහි මව් වර්ගය සමඟ ලබා ගන්න විමසුමක් ලියන්න.
වර්ගයක් එහි මව් වර්ගය සහ මුතුන් මිත්තන්ගේ වර්ගය සමඟ ලබා ගන්න විමසුමක් ලියන්න.
වර්ගයක් එහි මව් වර්ගය, මුතුන් මිත්තන්ගේ වර්ගය සහ මුතුන් මිත්තන්ගේ මුතුන් මිත්තන්ගේ වර්ගය සමඟ ලබා ගන්න විමසුමක් ලියන්න.